2

貸出本の最大数を持つサブジェクトエリアを計算したいと思います。次のクエリがあります。

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ではなく)生物学として表示されます。これが起こっている理由を提案してください

4

2 に答える 2

0

わかりました。私はあなたが何を望んでいるのか理解していると思います。あなたはMax(Copies_On_Loan)を持つサブジェクトを取得しようとしています。もしそうなら、これはうまくいくはずです(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フィドルです。

幸運を。

于 2013-01-25T18:02:58.160 に答える
0

私の頭のてっぺんから、あなたはこれに似たものが必要なようです:

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の実用的な例を提供する必要があります。

于 2013-01-25T18:49:12.517 に答える