簡體   English   中英

SQL - 使用Group By和case

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM