考虑到"SQL执行顺序",GROUP BY语句如何处理SELECT语句中CASE WHEN操作生成的列?
示例查询:
SELECT
CASE
WHEN COM_SALES_PRC > 1000000 THEN "good job"
END AS Performance,
COUNT(CUST_SEQ_NO) AS NumberofEmployees
FROM PREP_MONTHLY_STAT
GROUP BY Performance
虽然上面的查询运行时没有错误,但下面的查询给了我一个错误。这是有意义的,因为WHERE语句不知道SELECT语句中要给出的别名。
SELECT
CASE
WHEN COM_SALES_PRC > 1000000 THEN "good job"
END AS Performance,
COUNT(CUST_SEQ_NO) AS NumberofEmployees
FROM PREP_MONTHLY_STAT
WHERE Performance IS NOT NULL
- SQL执行顺序**:
https://www.sisense.com/blog/sql-query-order-of-operations/
1.自
1.地点
1.分组依据
1.有
1.选择
1.排序人
1.限值
我是个写疑问的新手,如果答案能尽可能详细,我将不胜感激。谢谢。
1条答案
按热度按时间fd3cxomn1#
首先,要知道
COUNT(...)
的存在意味着GROUP BY
的存在,如果没有显式的GROUP BY
,那么整个表就是一个“组”,COUNT
、SUM
等是“聚合”。WHERE
不能引用SELECT
中的表达式。HAVING
和ORDER BY
只能在GROUP BY
聚合它们之后引用 * 聚合 *。可以将
WHERE Performance IS NOT NULL
更改为HAVING Performance IS NOT NULL
(我不喜欢将
SELECT
设为5。)使用
COUNT
的一些问题,以及更多示例:COUNT(x)
检查x
是否为NOT NULL
。在您的情况下有必要这样做吗?如果没有,则简单地说COUNT(*)
。如果你真实的的目标更复杂,让我们来看看。