oracle SQL:group by

gr8qqesn  于 2023-06-22  发布在  Oracle
关注(0)|答案(2)|浏览(132)

假设我有一个表A,列名为DIF。此列可以有4个不同的值(a - B - c - d)。
我想按此DIF列的结果分组

select count(*) from table A group by DIF;

但对于价值观c et d,我希望他们在一起。所以我会有a,B和cd的计数(*)。
这怎么可能?

f0brbegy

f0brbegy1#

使用CASE表达式:

SELECT CASE WHEN dif IN ('c', 'd') THEN 'cd' ELSE dif END AS dif,
       COUNT(*)
FROM   table_name
GROUP BY
       CASE WHEN dif IN ('c', 'd') THEN 'cd' ELSE dif END;

其中,对于样本数据:

CREATE TABLE table_name (dif) AS
SELECT 'a' FROM DUAL CONNECT BY LEVEL <= 5 UNION ALL
SELECT 'b' FROM DUAL CONNECT BY LEVEL <= 3 UNION ALL
SELECT 'c' FROM DUAL CONNECT BY LEVEL <= 6 UNION ALL
SELECT 'd' FROM DUAL CONNECT BY LEVEL <= 7;

输出:
| DIF| COUNT(*)|
| - -----|- -----|
| B| 3|
| 一种|5个|
| 光盘|十三个|
fiddle

jv2fixgn

jv2fixgn2#

Case应该可以

select col5,count(*) from TABLE1_ GROUP BY col5

返回

使用Case定义一个新的变量来分组,如下所示:

SELECT 
  CASE
    WHEN col5 IN ('brown', 'green') THEN 'browngreen'
    ELSE col5
  END AS GroupedDIF,
  COUNT(*) AS Count_
FROM TABLE1_
GROUP BY GroupedDIF;

返回

注意:这是用postgresql而不是oracle完成的,但应该是可以理解的

相关问题