需要在oracle中使用group by查询并计算以下内容
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了需要在oracle中使用group by查询并计算以下内容相关的知识,希望对你有一定的参考价值。
我有一张如下表。
12-APR-19 06.48.08.883000 PM,AWSA
12-APR-19 06.48.41.208000 PM,
12-APR-19 07.24.55.697334 PM,ER
11-APR-19 08.58.34.835000 AM,AWSA
10-APR-19 08.10.38.675052 PM,ER
19-APR-19 09.48.14.597000 AM,
.........
试过以下查询。
SELECT TO_CHAR(register_date,'DD-MON-YY') || ',' ||
reg_type || ',' || COUNT(*)
FROM po_ta_oam_customer
WHERE register_date >= '01-APR-19' AND register_date < '08-APR-19'
GROUP BY TO_CHAR(register_date,'DD-MON-YY'),
reg_type
ORDER BY TO_CHAR(register_date,'DD-MON-YY');
我得到的结果如下。
1-Apr-19 AWSA 1222
1-Apr-19 ER 34
1-Apr-19 2556
2-Apr-19 AWSA 1062
2-Apr-19 ER 22
2-Apr-19 2431
3-Apr-19 AWSA 1037
3-Apr-19 ER 33
3-Apr-19 2521
4-Apr-19 AWSA 920
4-Apr-19 ER 36
4-Apr-19 2359
5-Apr-19 AWSA 832
5-Apr-19 ER 20
5-Apr-19 2091
6-Apr-19 AWSA 476
6-Apr-19 ER 18
6-Apr-19 1673
7-Apr-19 AWSA 50
7-Apr-19 ER 15
7-Apr-19 1555
但我试图得到如下结果。
Date AWSA ER Blanks
1-Apr-19 1222 34 2556
2-Apr-19 1062 22 2431
3-Apr-19 1037 33 2521
4-Apr-19 920 36 2359
5-Apr-19 832 20 2091
6-Apr-19 476 18 1673
7-Apr-19 50 15 1555
答案
这实际上是对Barbaros答案的一种变化。但我建议:
SELECT TO_CHAR(register_date, 'DD-MON-YY') as "Date",
SUM(CASE WHEN reg_type = 'AWSA' THEN 1 ELSE 0 END ) as AWSA,
SUM(CASE WHEN reg_type = 'ER' THEN 1 ELSE 0 END) as ER,
SUM(CASE WHEN TRIM(reg_type) IS NULL THEN 1 ELSE 0 END) as Blank
FROM po_ta_oam_customer
WHERE register_date >= DATE '2019-04-01' AND
register_date < DATE '2019-04-08'
GROUP BY TO_CHAR(register_date, 'DD-MON-YY')
ORDER BY MAX(register_date);
笔记:
- 日期常量作为日期常量而不是字符串输入。 Oracle支持这一点,它使查询更清晰。
- 包括4月7日的所有数据。
ORDER BY
将工作超过一个月的时间。Blank
的计算适用于任意数量的空间或NULL
值。
另一答案
你可以使用conditional aggregation
SELECT TO_CHAR(register_date,'DD-MON-YY') as "Date",
COUNT( CASE WHEN reg_type = 'AWSA' THEN 1 END ) as AWSA,
COUNT( CASE WHEN reg_type = 'ER' THEN 1 END ) as ER,
COUNT( CASE WHEN reg_type = ' ' THEN 1 END ) as "Blank"
FROM po_ta_oam_customer
WHERE register_date BETWEEN '01-APR-19' AND '07-APR-19'
GROUP BY TO_CHAR(register_date,'DD-MON-YY')
ORDER BY "Date";
附:我不确定reg_type = ' '
校对中构造"Blank"
列的空格字符的长度,似乎有2个字符。长度,我离开了。
以上是关于需要在oracle中使用group by查询并计算以下内容的主要内容,如果未能解决你的问题,请参考以下文章