阿摩線上測驗 登入

申論題資訊

試卷:108年 - 108 經濟部所屬事業機構_新進職員甄試_資訊:1.資訊管理、2.程式設計#80813
科目:國營事業◆1.資訊管理 2.程式設計
年份:108年
排序:0

題組內容

一、某公司的關聯式資料庫包含下列表格,有底線者為主鍵:(22 分)
 貨品(貨號,品名,單價,庫存數量,供應商編號,供應商名稱) 
供應商(供應商編號,供應商名稱,供應商地址,供應商電話,聯絡人)
 (一)請用 SQL 列出下列查詢:(14 分)

申論題內容

(3)至少供應 2 種貨品之供應商名稱,及該供應商販售幾種貨品。(7 分)

詳解 (共 4 筆)

詳解 提供者:Mihaeru

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 供應商名稱 就會把他們算在一起了。

詳解 提供者:111考生
SELECT 供應商名稱, COUNT(貨號) AS 賣幾種商品
FROM 貨品
GROUP BY 貨品.供應商編號
HAVING COUNT(貨號)>=2
詳解 提供者:Jian Ting Liu

SELECT 供應商名稱, COUNT(品名) AS “供應商販售幾種貨品

FROM 貨品

GROUP BY 供應商名稱

HAVING COUNT(品名)≥2;

詳解 提供者:我還有明天

SELECT 供應商名稱 ,COUNT(DISTINCT品名) AS 兩種以上貨品供應商

FROM 貨品

WHERE 兩種以上貨品供應商>= 2