簡體   English   中英

檢索包含字段最大值的整行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM