gpt4 book ai didi

sql - Oracle SQL 条件求和

转载 作者:行者123 更新时间:2023-12-04 15:22:54 26 4
gpt4 key购买 nike

我有一个名称和数值表,我想对按名称分组的值求和。这部分很简单:

SELECT
name,
SUM(my_value) "MyValue"
FROM my_table
GROUP BY name

但我的值中也有字符串“UNLIMITED”。当组中有“UNLIMITED”时,我只想选择值“UNLIMITED”而不做任何求和。这是我使用 UNION 想到的,但我知道有更好的方法:

SELECT 
name,
MAX("MyValue")
FROM (
SELECT
name,
'UNLIMITED' "MyValue"
FROM my_table
WHERE my_value = 'UNLIMITED'
GROUP BY name
UNION
SELECT
name,
TO_CHAR(SUM(
CASE WHEN my_value = 'UNLIMITED'
THEN '0'
ELSE my_value END
)) "MyValue"
FROM my_table
GROUP BY name
) t
GROUP BY name

请查看SqlFiddle举个真实的例子。

示例表

NAME    MY_VALUE
name1 50
name1 20
name2 30
name2 UNLIMITED

示例想要的结果

NAME    SUM("MYVALUE")
name1 70
name2 UNLIMITED

最佳答案

这是表达逻辑的一种非常简单的方法:

SELECT name,
(CASE WHEN MAX(my_value) = 'UNLIMITED' THEN 'UNLIMITED'
ELSE TO_CHAR(SUM(CASE WHEN my_value <> 'UNLIMITED' THEN my_value END))
END)
FROM my_table
GROUP BY name;

这利用了字符排在数字之后的事实。

或者类似的逻辑:

SELECT name,
(CASE WHEN COUNT(*) <> COUNT(NULLIF(my_value, 'UNLIMITED')) THEN 'UNLIMITED'
ELSE TO_CHAR(SUM(NULLIF(my_value, 'UNLIMITED')))
END)
FROM my_table
GROUP BY name;

关于sql - Oracle SQL 条件求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55923081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com