gpt4 book ai didi

sql - SQL-带大小写的分组依据

转载 作者:行者123 更新时间:2023-12-03 08:05:33 26 4
gpt4 key购买 nike

每当有人在SELECT语句之后编写CASE语句时,我经常看到CASE语句是在SQL的GROUP BY中编写的。是一个规则吗?或者,如果它具有某种意义,那么什么时候应该在SQL的GROUP BY中使用CASE语句?

例如。

*

SELECT supplier_id,
CASE
WHEN supplier_name = 'IBM' and supplier_type = 'Hardware' THEN 'North office'
WHEN supplier_name = 'IBM' and supplier_type = 'Software' THEN 'South office'
END
FROM suppliers;
GROUP BY supplier_id
CASE
WHEN supplier_name = 'IBM' and supplier_type = 'Hardware' THEN 'North office'
WHEN supplier_name = 'IBM' and supplier_type = 'Software' THEN 'South office'
END*

当我删除用GROUP BY编写的CASE语句时,查询不会产生期望的结果。为什么会这样?

最佳答案

大多数数据库引擎对聚合查询都有要求。 select中的所有列都必须在group by子句中或包装在聚合函数中(例如min()max()等)。

在两种情况下放宽了此要求。 MySQL将允许未聚合的列作为扩展。它选择一个任意值。 SQL标准允许您按表中的唯一ID分组,然后引用其他列(技术上称为“功能相关”)。

因此,在大多数数据库中,从case中删除group by将产生错误。在MySQL中,它将为每个supplier_id返回一行,第二列具有任意值。

但是,对于您问题中的查询,它更容易编写:

SELECT distinct supplier_id,
(CASE WHEN supplier_name = 'IBM' and supplier_type = 'Hardware' THEN 'North office'
WHEN supplier_name = 'IBM' and supplier_type = 'Software' THEN 'South office'
END)
FROM suppliers;

关于sql - SQL-带大小写的分组依据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25078295/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com