SELECT 供應商名稱, COUNT(DISTINCT(貨號)) AS 販售幾種商品
FROM 貨品
GROUP BY 供應商編號
HAVING COUNT(DISTINCT(貨號)) >1 ;
=========================================
COUNT 要不要另外命名無所謂,題目沒特別講明看得懂就好。
這題不用 JOIN 供應商 table 因為要的資料貨品 table 裡都有。
題目要求篩選出至少供應兩項貨品的供應商名稱,所以要先用 GROUP BY 將供應商進行分群,使用供應商編號是因為具有唯一性。
聚合函數如果要設條件則需要使用HAVING,不能用WHERE。
COUNT()的意義為計算符合條件的資料筆數,DISTINCT()的意義為篩選出該欄位不同的值有哪幾個
故COUNT(DISTINCT(貨號))會先將所有的貨號種類列出,在計算總共有幾種貨號,最後使用 >1 篩選出有兩個以上的,你也可以用>=2,意思一樣。
補:後來發現貨號是primary key,所以不用DISTINCT沒關係,本身就具有唯一性,直接COUNT(貨號)就好,或是COUNT(*)也行。
另外我會使用GROUP BY 供應商編號 的原因是為了避免有供應商名稱重複的狀況,畢竟primary key只有供應商編號,假設有兩家供應商的名稱真的一樣,那GROUP BY 供應商名稱 就會把他們算在一起了。
SELECT 供應商名稱, COUNT(品名) AS “供應商販售幾種貨品”
FROM 貨品
GROUP BY 供應商名稱
HAVING COUNT(品名)≥2;
SELECT 供應商名稱 ,COUNT(DISTINCT品名) AS 兩種以上貨品供應商
FROM 貨品
WHERE 兩種以上貨品供應商>= 2