[英]SQL - Use of Group By with case
每當在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進行分組,然后引用其他列(技術上稱為“功能依賴”)。
因此,在大多數數據庫中,從group by
刪除case
會產生錯誤。 在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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.