我有一个这种格式的表
COL1 COL2 COL3
A NULL 4
A NULL 4
A VAL1 4
A VAL2 4
A VAL3 4
B NULL 5
B VAL1 6
我需要输出如下输出:
COL1 TOTAL VALID
A 20 12
B 11 6
我的问题是,如何获得'VALID'列 - 只有当col2不为空时才应该使用col3的总和。
我能够使用SUM和group by子句正确获取'TOTAL'字段。但是如何计算'VALID'列呢?
有什么想法吗? 非常感谢!
答案 0 :(得分:15)
这样的事情:
SELECT col1
, SUM(col3) AS TOTAL
, SUM(CASE WHEN col2 IS NOT NULL THEN col3 ELSE NULL END) AS VALID
FROM mytable
GROUP BY col1
“技巧”是使用CASE表达式有条件地返回col3的值。
答案 1 :(得分:0)
您可以使用子查询:
SELECT SUM(Col3) AS Total,
(SELECT SUM(Filtered.Col3)
FROM table Filtered
WHERE Filtered.Col1 = Grouped.Col1
AND Filtered.Col2 IS NOT NULL
) AS Valid
FROM table Grouped
GROUP BY Col1
答案 2 :(得分:-1)
这应该有用......
SELECT B.COL1, SUM(A.COL3) AS TOTAL, SUM(B.COL3) AS VALID
FROM
(SELECT COL1, COL3 FROM ORIGINAL WHERE COL2 IS NULL) A
INNER JOIN (SELECT COL1, COL3 FROM ORIGINAL) B ON A.COL1 = B.COL1