SQL中CASE WHEN和GROUP BY执行顺序
时间: 2024-05-28 09:13:50 浏览: 527
在SQL中,执行顺序是先执行FROM子句中的表,然后执行WHERE子句的筛选,接着执行GROUP BY分组,然后执行SELECT子句中的表达式和函数,最后执行ORDER BY排序。
在此基础上,CASE WHEN语句的执行顺序是在SELECT子句之后,但在ORDER BY之前。也就是说,CASE WHEN语句可以用于SELECT子句中的表达式和函数,但它们不会影响GROUP BY分组。
因此,如果您想在GROUP BY分组之前使用CASE WHEN语句进行筛选或计算,可以使用子查询或通用表表达式(CTE)来实现。
相关问题
sql case when和ORDER BY执行顺序
SQL的执行顺序一般是这样的:FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY。
在使用CASE WHEN语句时,它会被视为SELECT语句的一部分,因此它会在ORDER BY之前执行。这意味着你可以在CASE WHEN语句中使用ORDER BY子句,但是ORDER BY子句不会影响CASE WHEN语句。
举个例子:
```
SELECT
CASE
WHEN column1 = 'value1' THEN 'A'
WHEN column1 = 'value2' THEN 'B'
ELSE 'C'
END AS column_alias
FROM table
ORDER BY column1 DESC;
```
在这个例子中,CASE WHEN语句会在ORDER BY之前执行,因此它会根据条件给column1赋值,然后再按照column1的值进行排序。
需要注意的是,如果你在CASE WHEN语句中使用了聚合函数,如SUM、AVG等,那么它会在GROUP BY之后执行。
sql case when group by
在SQL语句中,当使用到GROUP BY时,通常只能选择进行GROUP BY的字段以及sum、count、avg、max、min等聚合函数。但是可以使用CASE WHEN进一步对这些聚合函数进行条件约束,作用域仍然是经过GROUP BY后的分组数据。
例如,以下是一个使用CASE WHEN的示例:
SELECT
CASE WHEN condition1 THEN value1
WHEN condition2 THEN value2
ELSE value3
END AS column_name,
COUNT(*) AS count
FROM table
GROUP BY column_name;
另外,也可以通过GROUP BY与CASE WHEN结合使用,根据条件对字段进行拼接。以下是一个示例:
SELECT
date,
SUM(CASE WHEN type = 0 THEN price END) AS type0_price,
SUM(CASE WHEN type = 1 THEN price END) AS type1_price
FROM Price
GROUP BY date;
阅读全文