我想在查询中使用表达式组来创建组,同时也创建一个组“all”,其中添加了所有实例。 该代码只是一个示例来展示我想要做什么,可能的语法错误无关紧要。
select (*)
from table
where id in ('a','b','c','d','e','f')
group by case
when id in ('a','d') then '1'
when id in ('b','e') then '2'
when id in ('c','f') then '3'
when id in ('a','b','c','d','e','f') then 'all'
end
result
1,...
2,...
3,...
wanted result
1,...
2,...
3,...
all,...
使用
CASE
表达式、聚合和 ROLLUP
:
SELECT COALESCE(
CASE
WHEN id IN ('a','d') THEN '1'
WHEN id IN ('b','e') THEN '2'
WHEN id IN ('c','f') THEN '3'
END,
'all'
) AS grp,
SUM(value) AS total_value
FROM table_name
WHERE id IN ('a','b','c','d','e','f')
GROUP BY
ROLLUP(
CASE
WHEN id IN ('a','d') THEN '1'
WHEN id IN ('b','e') THEN '2'
WHEN id IN ('c','f') THEN '3'
END
)
对于样本数据:
CREATE TABLE table_name (id, value) AS
SELECT 'a', 1 FROM DUAL CONNECT BY LEVEL <= 10 UNION ALL
SELECT 'b', 1 FROM DUAL CONNECT BY LEVEL <= 7 UNION ALL
SELECT 'c', 1 FROM DUAL CONNECT BY LEVEL <= 3 UNION ALL
SELECT 'd', 1 FROM DUAL CONNECT BY LEVEL <= 5 UNION ALL
SELECT 'e', 1 FROM DUAL CONNECT BY LEVEL <= 2 UNION ALL
SELECT 'f', 1 FROM DUAL CONNECT BY LEVEL <= 9 UNION ALL
SELECT 'g', 1 FROM DUAL CONNECT BY LEVEL <= 23;
输出:
玻璃钢 | TOTAL_VALUE |
---|---|
1 | 15 |
2 | 9 |
3 | 12 |
全部 | 36 |