关于Oracle的SQL语句中group by的空值问题请教?

关于Oracle的SQL语句中group by的空值问题请教?

第一个SQL为:

select t.latn_id,
count(*)
from card.tb_markactive_win_record t
where t.prize_id='6'
and t.win_time >= to_date('2010-11-29', 'yyyy-mm-dd')
and t.win_time < to_date('2010-11-30', 'yyyy-mm-dd')
group by t.latn_id
order by t.latn_id;

执行结果为:

550 3
551 11
552 1
553 4
555 3
556 1
560 4
561 1
562 1
563 3

第二个SQL为:

select distinct latn_id from tb_markactive_win_record order by latn_id;

执行的结果为:

550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566

我现在想写一个SQL,将其中第一个SQL结果里的空值也显示出来。通常group by只能统计有值的数据,对于空值却不能显示,我现在希望将空值也显示出来,结果如下,请问这个SQL该怎么写呢?十分感谢。

550 3
551 11
552 1
553 4
554
555 3
556 1
557
558
559
560 4
561 1
562 1
563 3
564
565
566

你那个不是由于group by引起的,而是因为where那里过滤掉了

有一个笨办法,两个sql联合起来用
SELECT DISTINCT t1.latn_id, t2.cnt
FROM tb_markactive_win_record t1
LEFT JOIN
(select t.latn_id,
count(*) AS cnt
from card.tb_markactive_win_record t
where t.prize_id='6'
and t.win_time >= to_date('2010-11-29', 'yyyy-mm-dd')
and t.win_time < to_date('2010-11-30', 'yyyy-mm-dd')
group by t.latn_id
order by t.latn_id) t2
ON t1.latn_id = t2.latn_id
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-11-30
没错,楼上的左连接就可以实现!

关于Oracle的SQL语句中group by的空值问题请教?
group by t.latn_id order by t.latn_id) t2 ON t1.latn_id = t2.latn_id

oracle 中group by 的用法问题
在select 语句中可以使用group by 子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。group by 子句可以将查询结果分组,并返回行的汇总信息Oracle 按照group by 子句中指定的表达式的值分组查询结果。在带有group by 子句的查询语句中,在se...

oracle中group by 和order b
在Oracle查询中,order by子句在子查询中扮演着重要角色。默认情况下,它执行升序排序,类似于使用"order by 字段名 asc"。然而,若需要降序排列,只需在字段名后添加"desc",如"order by 字段名 desc"。一个重要的注意点是,order by语句必须放置在查询条件的最后,否则可能会引发错误。这是因为order...

sql中case和group by一起用的一个问题
SELECT tt,SUM(population)FROM (SELECT SUM(population) AS population, (CASE WHEN country='中国' THEN'亚洲' WHEN country='印度' THEN'亚洲' WHEN country='日本' THEN'亚洲' WHEN country='美国' THEN'北美洲' WHEN country='加拿大' THEN'北美洲' WHE...

菜鸟请教SQL如何计算有几组(GROUP BY 问题)
你的语句按照字段b分组,结果有几组是根据字段b去重复后的个数来确定的。如果是oracle你可以这样查询:select distinct 字段b from table;结果为3,也就是3组

Oracle 中left join,where,group by的用法
在Oracle数据库系统中,理解和正确使用左连接(LEFT JOIN)、筛选(WHERE)和分组(GROUP BY)是编写高效SQL查询的关键技能。以下是这些操作的使用方法和示例。左连接(LEFT JOIN)用于查询两个表中的匹配数据,无论另一表中的数据是否存在。它确保了所有来自左表(表_1)的行在结果集中都存在,即使没...

oracle数据库中group by 1 是什么意思?
group by 1是指第一列,结果中的第一列,以他作为分组,说白了就是去除第一列重复值

oracle中grouping()的使用方法
是SQL SERVER中的一个函数。 指示是否聚合 GROUP BY 列表中的指定列表达式。在结果集中,如果 GROUPING 返回 1 则指示聚合;返回 0 则指示不聚合。如果指定了 GROUP BY,则 GROUPING 只能用在 SELECT 列表、HAVING 和 ORDER BY 子句中。 GROUPING 用于区分标准空值和由 ROLLUP、CUBE 或 GROUPING ...

Oracle,SQL语句中对错误提示:不是单组分组函数的
在Oracle和SQL语句中,当执行如下的查询:sql SELECT deptno, MAX(count(*))FROM emp GROUP BY deptno 实际上,这里的 `MAX(count(*))` 实际上是进行了两次分组操作。第一次是对 `deptno` 进行分组,第二次是对每个部门内的所有记录计数。这可能导致误解,因为 `max()` 函数通常用于单个分组结果...

oracle sql语句 group by 不能用的问题
from drp_client dc left join drp_client_salestarget dcs on dcs.clientno = dc.clientno) t1 on ds.purchasesno = t1.clientno) t2 on sd.goodsno = t2.goodsno group by t2.area,t2.clientyear,t2.clientmonth,t2.goodsno,t2.goodsname,t2.targetamount 这样就可以了 ...

相似回答