[英]Retrieving the entire row containing maximum value of a field
我想計算出借書數量最多的主題區域。 我有以下查詢:
SELECT SubjectArea
FROM (
SELECT SubjectArea, MAX( Copies_On_Loan ) AS Max
FROM (
SELECT
Section.SubjectArea AS SubjectArea,
SUM( LoanBook.Copies_On_Loan ) AS Copies_On_Loan
FROM Section
NATURAL JOIN Items
NATURAL JOIN LoanBook
GROUP BY Section.SubjectArea
) AS Table1
) AS Table2
最里面的查詢:
SELECT
Section.SubjectArea AS SubjectArea,
SUM( LoanBook.Copies_On_Loan ) AS Copies_On_Loan
FROM Section
NATURAL JOIN Items
NATURAL JOIN LoanBook
GROUP BY Section.SubjectArea
返回下表:
SubjectArea Copies_On_Loan
Biology 0
DBMS 3
但是,整個查詢將結果作為生物學(而不是DBMS)給出。 請說明為什么會這樣
好的,我想我了解您想要的-您正在嘗試獲得具有Max(Copies_On_Loan)的Subject。 如果是這樣,這應該可以工作(如果MySQL支持CTE,會更漂亮):
SELECT SubjectArea
FROM (
SELECT MAX( Copies_On_Loan ) AS Max_Copies_On_Loan
FROM (
SELECT
Section.SubjectArea AS SubjectArea,
SUM( LoanBook.Copies_On_Loan ) AS Copies_On_Loan
FROM Section
NATURAL JOIN Items
NATURAL JOIN LoanBook
GROUP BY Section.SubjectArea
) AS Table1
) AS Table2 JOIN
(
SELECT
Section.SubjectArea AS SubjectArea,
SUM( LoanBook.Copies_On_Loan ) AS Copies_On_Loan
FROM Section
NATURAL JOIN Items
NATURAL JOIN LoanBook
GROUP BY Section.SubjectArea
) Table3 ON Table2.Max_Copies_On_Loan = Table3.Copies_On_Loan
這是更新的SQL Fiddle 。
祝好運。
在我頭頂的上方,您似乎需要以下內容:
SELECT SubjectArea
FROM Section NATURAL JOIN Items NATURAL JOIN LoanBook
GROUP BY SubjectArea
HAVING SUM(Copies_On_Loan) = (
SELECT MAX(M) (
SELECT SUM(Copies_On_Loan) M
FROM Section NATURAL JOIN Items NATURAL JOIN LoanBook
GROUP BY SubjectArea
) Q1
) Q2
在計划英語中:
SUM(Copies_On_Loan) M
),然后找到最大和( MAX(M)
)。 HAVING
)。 PS:正如其他人所建議的那樣,使用顯式列名(代替NATURAL JOIN)將使您的代碼不太“脆弱”。
PPS:您確實應該為此類問題提供數據庫結構,或者甚至可以提供一個更好的sqlfiddle.com示例,以便我們可以立即測試答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.