表 exhibitiononline (PK: exhiid) 與 exhibitor (FK: exhid → exhiid) 為一對多關系。需查詢 exhibitiononline 中在 exhibitor 有關聯記錄的所有行,並按 exhid 出現次數降序排列。
SELECT eo.*
FROM exhibitiononline eo
JOIN (
SELECT exhid, COUNT(*) AS cnt
FROM exhibitor
GROUP BY exhid
) e_cnt ON eo.exhiid = e_cnt.exhid
ORDER BY e_cnt.cnt DESC;
GROUP BY exhid 聚合每個展會的參展商數量 cnt。JOIN 關聯,僅保留有參展商的展會(內連接天然過濾無匹配行)。ORDER BY cnt DESC:參展商多的展會優先顯示。-- EXISTS 相關子查詢 (不需輸出 cnt 列時)
SELECT * FROM exhibitiononline eo
WHERE EXISTS (SELECT 1 FROM exhibitor e WHERE e.exhid = eo.exhiid)
ORDER BY (SELECT COUNT(*) FROM exhibitor e WHERE e.exhid = eo.exhiid) DESC;
-- APPLY (SQL Server 專用,邏輯清晰)
SELECT eo.*
FROM exhibitiononline eo
CROSS APPLY (
SELECT COUNT(*) AS cnt FROM exhibitor e WHERE e.exhid = eo.exhiid
) ca
ORDER BY ca.cnt DESC;
exhibitor:CREATE INDEX IX_Exhibitor_Exhid ON exhibitor(exhid); 加速分組聚合與 JOIN。exhibitiononline:PK exhiid 已為聚集索引,無需額外索引。