2016-10-18 7 views
2

SQLを使用して特定の情報を取得する方法を学習しようとしています。私はSQL用にPHPMyAdminを使用しています。ここ構造は次のとおりです。SQLでMAXを使用する

著者(ID、姓、姓、YearOfBirth、性別、LivingCityID)

ブック(ID、名前、タイプ、YearPublished、発行者ID、SoldBookCount)

書き込み(BookID 、AuthorID)

市(ID、CityName、国)

発行者(ID、PUBLISHERNAME、PublisherCityID)

ここでは、さまざまな情報を得るためのいくつかの試みがあります。これはどうやってやるの?

これは、最も多くの書籍を販売した著者を取得するために、著者 と売り上げ本を示しています。

SELECT w.AuthorID, MAX(b.SoldBookCount) 
FROM book as b, writes as w, author as a 
WHERE b.ID = w.BookID AND a.ID = w.AuthorID 

その総販売書籍数 は、著者ID、ブックタイプ、および販売書籍数を示す、最大で著者とブックタイプのペアを、見つけるために、この。

SELECT w.AuthorID, b.Type, MAX(b.SoldBookCount) 
FROM book as b, writes as w, author as a 
WHERE b.ID = w.BookID AND a.ID = w.AuthorID 
+2

*絶対に* FROM句にカンマを使用しないでください。 *常に*適切で明示的な 'JOIN'構文を使用してください。 –

+1

' GROUP BY'をチェックアウトしてください。 – jarlh

答えて

2

これは、明示的なJOIN句を使用して、各著者/書籍のペアのためにあなたの販売書籍数を取得します。私はWHEREではなく、ONに結合条件を入れたいと思っています。

SELECT a.ID, b.ID, b.SoldBookCount 
FROM author as a 
    JOIN writes AS w ON w.AuthorID = a.ID 
    JOIN book AS b ON w.BookID = b.ID 

あなたはGROUP BYSUMを使用することにより、互いのために販売冊の合計数を取得することができます:最後に、あなたがORDER BYで、追加クエリで最も販売ブックと作者を得ることができます

SELECT a.ID, SUM(b.SoldBookCount) 
FROM author as a 
    JOIN writes AS w ON w.AuthorID = a.ID 
    JOIN book AS b ON w.BookID = b.ID 
GROUP BY a.ID 

をおよびLIMIT

SELECT authorID, totalSoldCount 
FROM (
    SELECT a.ID as authorID, SUM(b.SoldBookCount) as totalSoldCount 
    FROM author as a 
     JOIN writes AS w ON w.AuthorID = a.ID 
     JOIN book AS b ON w.BookID = b.ID 
    GROUP BY a.ID 
) as t 
ORDER BY totalSoldCount DESC 
LIMIT 1 

ここではさまざまなバリエーションがあります。たとえば、SELECT a.IDを置いたところなら、どこでもSELECT w.authorIDを持つことができ、同じ結果になります。

実は、私はあなたが単一のクエリとして最後のクエリを行うことができると思います。

SELECT a.ID as authorID, SUM(b.SoldBookCount) as totalSoldCount 
FROM author as a 
    JOIN writes AS w ON w.AuthorID = a.ID 
    JOIN book AS b ON w.BookID = b.ID 
GROUP BY a.ID 
ORDER BY SUM(b.SoldBookCount) DESC 
LIMIT 1 

あなたが特に求められているので、MAXは、その列の最大値を選択しますが、それは選択されません。その値を持つです。だから、これで売らブックの最大数を取得することができます。

SELECT MAX(SoldBookCount) 
FROM book 

をしかし、最も売上高booxのIDを取得するために、あなたはこの(上記のような)をしなければならない

SELECT ID, SoldBookCount 
FROM book 
ORDER BY SoldBookCount DESC 
LIMIT 1 

別のオプションは、最大値を計算して、本の数は

SELECT ID, SoldBookCount 
FROM book 
WHERE SoldBookCount=MAX(SoldBookCount) 

を販売している。これは、遅くなることがあり帳(複数可)を選択することではなく、ネクタイがある場合、いくつかの書籍を選択する利点を持っています最初にあなたは、最も多くの本が販売されている著者のために同じ考えを使うことができます。

関連する問題