1

manuscripts というテーブルがあります

BOOKID  AUTHORID BOOKNAME       GENRE   NOOFCOPIES  AMOUNT
B105    A102     Diagnosis      Journal 500         10000
B102    A102     The Essence... Fiction 110         11000
B106    A102     Clinical Sci.  Educat. 125         18750
B104    A103     Mind Games     Fiction 200         20000
B100    A102     Sublime        Fiction 100         10000
B101    A105     C Programming  Educati 125         18750
B103    A101     Scribe         Journal 500         10000
B107    A101     Clinical Chem. Educat. 125         54646
B108    A103     Clinical Chem. Educat. 125         54646  

最大金額を支払った AuthorIds を取得するにはどうすればよいですか? 私が書いたら

select distinct a.AuthorId,m.amount 
from Author a,manuscripts m 
where m.amount in (select max(amount) 
                   from manuscripts m 
                   where a.AuthorId=m.AuthorId)

その後、正しい出力を取得できますが、ブック名を追加すると、正しく結果が得られません..

4

2 に答える 2

3

使用している RDBMS について言及していないため、以下のクエリはほとんど RDBS で機能します (すべてではない) 。

SELECT  a.*
FROM    tablename a
        INNER JOIN
        (
            SELECT  AuthorID, MAX(Amount) max_amount
            FROM    tableName
            GROUP   BY AuthorID
        ) b ON  a.AuthorID = b.AuthorID AND
                a.Amount = b.max_amount

INDEXパフォーマンスを高速化するには、複合列を追加しますAuthorID, Amount

于 2013-02-08T09:53:30.450 に答える
0

これにより、価格が最大であるすべての行が表示されます。

SELECT m.*
FROM amanuscripts m
WHERE m.amount = (select MAX(amount) FROM manuscripts)

これにより、すべての著者の価格が最大であるすべての行が表示されます。

SELECT m.*
FROM manuscripts m
WHERE (m.authorid, m.amount) IN (select authorid, MAX(amount)
                                 FROM manuscripts
                                 GROUP BY authorid)

(上記のテーブルの構造を考えると、Author テーブルと Manuscripts テーブルを結合する必要はありません)

于 2013-02-08T09:56:39.960 に答える