首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HQL/SQL -如果有两个列(具有不同的名称)分组,如何分组

HQL/SQL -如果有两个列(具有不同的名称)分组,如何分组
EN

Stack Overflow用户
提问于 2018-01-24 00:45:23
回答 1查看 173关注 0票数 0

我有以下问题,例如(我的表和错误的HQL):

代码语言:javascript
复制
SELECT to_char(student.dateInserted, 'YYYY-MM-DD'), count(student.dateInserted)
FROM STUDENTS student
INNER JOIN TEACHERS teacher ON (student.teacher_id == teacher.id)
WHERE (student.age > 20 AND student.dateInserted < SYSDATE)
OR (student.age < 20 AND student.dateUpdated  > SYSDATE-2)
GROUP BY to_char(student.dateInserted, 'YYYY-MM-DD')
ORDER BY to_char(student.dateInserted, 'YYYY-MM-DD');

我想要像这张桌子那样的输出。

代码语言:javascript
复制
+--------------------+
|    DATE    | COUNT |
+------------+-------+
| 2018-01-24 | 77    | -- count dateInserted and Updated together
| 2018-01-23 | 16    | -- the same thing
| 2018-01-22 | 22    | -- just dateInserted
|    etc.    | etc.  |
+------------+-------+

的问题是:如何在HQL中做到这一点?在SQL?中如何做到这一点?

在HQL,我审理过案件,但没有成功。

在SQL中,我尝试了外部SELECT和UNION ALL inside,但也没有成功。

代码语言:javascript
复制
-- SQL attempt (dont mention hql look):
-- And there is problem with first two grouped rows which is not together (2018-01-24 | 27 dateInsered) and (2018_01_24 | 50 dateUpdated)
SELECT datee, summ FROM
(
SELECT to_char(student.dateInserted, 'YYYY-MM-DD') as datee, count(student.dateInserted) as summ
FROM STUDENTS student
INNER JOIN TEACHERS teacher ON (student.teacher_id == teacher.id)
WHERE (student.age > 20 AND student.dateInserted < SYSDATE)
UNION ALL
SELECT to_char(student.dateUpdated, 'YYYY-MM-DD') as datee, count(student.dateUpdated) as summ
FROM STUDENTS student
INNER JOIN TEACHERS teacher ON (student.teacher_id == teacher.id)
WHERE (student.age < 20 AND student.dateUpdated  > SYSDATE-2)
)
GROUP BY datee
ORDER BY datee;

任何帮助都很感激。请不要提及代码中的打字,而且这个例子没有什么意义:)知道.谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-01-24 00:49:44

我不明白teacher和这件事有什么关系。我觉得这能做你想做的事

代码语言:javascript
复制
SELECT yyyymmdd, SUM(num_inserted) as num_inserted,
       SUM(num_updated) as num_updated,
       SUM(num_inserted + num_updated) as both
FROM ((SELECT TO_CHAR(s.dateInserted, 'YYYY-MM-DD') as yyyymmdd, COUNT(*) as num_inserted, 0 as num_updated
       FROM STUDENTS s
       WHERE (s.age > 20 AND s.dateInserted < SYSDATE) OR
             (s.age < 20 AND s.dateUpdated  > SYSDATE - 2)
       GROUP BY TO_CHAR(s.dateInserted, 'YYYY-MM-DD')
      ) UNION ALL
      (SELECT TO_CHAR(s.dateUpdated, 'YYYY-MM-DD'), 0, COUNT(*) as num_updated
       FROM STUDENTS s
       WHERE (s.age > 20 AND s.dateInserted < SYSDATE) OR
             (s.age < 20 AND s.dateUpdated  > SYSDATE - 2)
       GROUP BY TO_CHAR(s.dateUpdated, 'YYYY-MM-DD')
      )
     ) s
GROUP BY yyyymmdd
ORDER BY yyyymmdd;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48413172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档