題組內容
四、假設現有如下個人實聯制登記紀錄的關連式資料庫,請使用SQL 回答相關的子問題。
Place(placeID, placeName, countyCity, district, address)PK:placeID
Place(placeID, placeName, countyCity, district, address)PK:placeID
Person(mobile, name, telecomProvider)PK:(mobile)
EnterRecord(placeID, mobile, date, time)
PK:(placeID, mobile, date, time)
FK:placeID ref. Place(placeID)
FK:mobile ref. Person(mobile)
PK:(placeID, mobile, date, time)
FK:placeID ref. Place(placeID)
FK:mobile ref. Person(mobile)
(二)請依 countyCity、district,分群顯示該行政區內,2021/05/11~2021/05/31 間, 所有公共場所進出人數的總和,結果需依進出人次多至少作排列。 (5 分)
詳解 (共 2 筆)
詳解
SELECT COUNT(*) FROM Place PL,Person P,
EnterRecord ER WHERE PL.placeID=ER.placeID
AND P.mobile=ER.mobile AND ER.date BETWEEN ‘20210511’ AND ‘20210531’
GROUP BY P.countyCity,P.district
Order BY COUNT(*) DESC;
詳解
SELECT
p.countyCity,
p.district,
COUNT(e.mobile) AS total_visits
FROM
EnterRecord e
JOIN
Place p ON e.placeID = p.placeID
WHERE
e.date BETWEEN '2021-05-11' AND '2021-05-31'
GROUP BY
p.countyCity,
p.district
ORDER BY
total_visits DESC;
這個查詢語句的解釋如下:
p.countyCity,
p.district,
COUNT(e.mobile) AS total_visits
FROM
EnterRecord e
JOIN
Place p ON e.placeID = p.placeID
WHERE
e.date BETWEEN '2021-05-11' AND '2021-05-31'
GROUP BY
p.countyCity,
p.district
ORDER BY
total_visits DESC;
這個查詢語句的解釋如下:
JOIN 子句:將 EnterRecord 表和 Place 表根據 placeID 進行連接,以便獲取 countyCity 和 district 的資訊。
WHERE 子句:篩選 EnterRecord 表中的記錄,日期在 2021/05/11 到 2021/05/31 之間。
GROUP BY 子句:根據 countyCity 和 district 進行分組,以便計算每個行政區內的進出人數總和。
SELECT 子句:選擇 countyCity、district 和每組中的進出人數總和(使用 COUNT(e.mobile))。
ORDER BY 子句:按進出人次的總和降序排列結果。
WHERE 子句:篩選 EnterRecord 表中的記錄,日期在 2021/05/11 到 2021/05/31 之間。
GROUP BY 子句:根據 countyCity 和 district 進行分組,以便計算每個行政區內的進出人數總和。
SELECT 子句:選擇 countyCity、district 和每組中的進出人數總和(使用 COUNT(e.mobile))。
ORDER BY 子句:按進出人次的總和降序排列結果。