【发布时间】:2020-12-12 16:51:13
【问题描述】:
我在下面有一个查询:
SELECT
d.name,
SUM(CASE WHEN e.salary > 100000 THEN 1 ELSE 0 END)
/ COUNT(DISTINCT e.id)
AS pct_above_100k,
COUNT(DISTINCT e.id) AS c
FROM employees e JOIN departments d ON e.department_id = d.id
GROUP BY 1
HAVING COUNT(*) > 10
ORDER BY 2 DESC
我这里用的是sum,但是如果我用count会有什么不同吗?
我知道 count 计算一个值存在的次数,并且 sum 将实际值相加,但在这里,因为我的条件是如果薪水 > 100000,它无论如何都会将其视为 1,对吗?
谢谢!
【问题讨论】:
-
正确。
Count会得到相同的结果。 -
我不同意,无论它的值是 0 还是 1,Count 仍然会计算行,而 sum 将求和,即如果值如果条件为真三次,那么它将返回 3,而 count 将返回数量行,无论条件是真还是假。
-
sum与count(*) filter (where e.salary > 10000) ....相同
标签: sql postgresql presto