在使用... HAVING COUNT(*)=(... MAX()..)工作原理:
- 在查詢中,它需要幾乎相同的子查詢兩次。
- 對於大多數數據庫,它需要二級子查詢MAX(COUNT(*)) 不支持。
在使用TOP/LIMIT/RANK等作品:
另外,使用1的TOP/LIMIT只會給出一行 - 如果有兩個或更多的醫生具有相同的最大患者數量,該怎麼辦?
我將問題分解成以下步驟:
獲取目標區域(S)和相關的計數
SELECT docName, COUNT(patient) AS countX
FROM doctor
GROUP BY docName
使用上面的「聲明範圍的觀點」,加入以獲得max count row(s)
WITH x AS
(
SELECT docName, COUNT(patient) AS countX
FROM doctor
GROUP BY docName
)
SELECT x.docName, x.countX
FROM x
INNER JOIN
(
SELECT MAX(countX) AS maxCountX
FROM x
) x2
ON x2.maxCountX = x.countX
WITH子句,它定義了一個'語句sco ped view「,有效地給出了可以在同一查詢中重新使用的命名子查詢。
JOIN與患者的最大計數行匹配。
雖然這種解決方案,使用的語句範圍的意見,是更長的時間,它是:
它是更容易測試的零件的查詢可以獨立運行。
這是自我記錄,因爲查詢直接反映了要求 即語句作用域視圖列出了目標字段和關聯的計數。
它可擴展,就好像其他條件或字段是必需的,這可以很容易地添加到語句作用域視圖。 例如,在這種情況下,應該更改表格結構以包含doctor-id作爲主鍵字段,這應該是結果的一部分。
什麼數據庫產品和版本? – Thomas 2011-03-01 20:30:53
@Thomas建議,如果不知道我們正在使用哪個數據庫,很難提供幫助。 – 2011-03-01 20:32:13
你把你的病人名字命名爲「作者」? 「病人」表的模式是什麼樣的? – Thomas 2011-03-01 20:33:29