我有一个包含名字和数字值的表格,我想按名字分组求和。这部分很简单:
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
CASE END
,我想你的意思是不使用MAX()
。 - Raymond Nijlandto_char
和max
:-) - T.S.