Sql 在hibernate中按两列条件分组
我想在两列上分组。如果b不为空,我想得到a和b组成的c组的总数;如果b为空,我想得到a组成的c组的总数 我编写了这个查询,但在b为null的情况下它不起作用!查询结果为b不为空的所有行Sql 在hibernate中按两列条件分组,sql,oracle,hibernate,group-by,Sql,Oracle,Hibernate,Group By,我想在两列上分组。如果b不为空,我想得到a和b组成的c组的总数;如果b为空,我想得到a组成的c组的总数 我编写了这个查询,但在b为null的情况下它不起作用!查询结果为b不为空的所有行 select m.s.a , case when (m.l is not null) then m.l.code end , coalesce(sum(m.c),0 ) from material m where m.Item.id =:itemId group by m.s.a, case w
select m.s.a ,
case when (m.l is not null)
then m.l.code end , coalesce(sum(m.c),0 )
from material m where m.Item.id =:itemId
group by m.s.a, case
when (m.l is not null)
then m.l.code end
+--+----+-------+---+
| | s | l | c |
+--+----+-------+---+
| | a | d | 1 |
| | a | d | 9 |
| | a | e | 3 |
| | a | f | 4 |
| | c | g | 5 |
| | c | g | 6 |
| | c | h | 20 |
| | d | null | 7 |
| | d | null | 8 |
预期结果:
+--+----+-------+---+
| | s | l | c |
+--+----+-------+---+
| | a | d | 10 |
| | a | e | 3 |
| | a | f | 4 |
| | c | g | 11 |
| | c | h | 20 |
| | d | | 15 |
默认情况下,oracle/postgres/mysql将生成预期的输出
SELECT s,l,sum(c)
FROM temp
GROUP BY s,l;
如果不想按空值分组,可以使用UNION
SELECT s,l,sum(c)
FROM temp
WHERE l is NOT NULL
GROUP BY s,l
UNION
SELECT s,l,sum(c)
FROM temp
WHERE l is NULL;
默认情况下,oracle/postgres/mysql将生成预期的输出
SELECT s,l,sum(c)
FROM temp
GROUP BY s,l;
如果不想按空值分组,可以使用UNION
SELECT s,l,sum(c)
FROM temp
WHERE l is NOT NULL
GROUP BY s,l
UNION
SELECT s,l,sum(c)
FROM temp
WHERE l is NULL;
你的问题没有多大意义。请在问题中添加一些示例数据和预期输出以澄清。@gurvindersingh在我编辑的文章中添加示例数据和预期输出您的问题没有多大意义。请在问题中添加一些示例数据和预期输出以澄清。@Gurvindersingh在编辑我的文章并添加示例数据和预期输出中我尝试了第一次查询,得到了与上面相同的结果!你能分享这个样本数据集吗?我尝试了第一个查询,得到了与上面相同的结果!你能分享这个样本数据集吗?