2016-10-22 6 views
0

私はMySQLを使い始めています。私はプロジェクトの問題を解決しようとしています。MySQLのクエリで期待した結果が得られません

車、販売、顧客の3つのテーブルがあります。 車にはVIDがpk、モデルや価格などの他の属性があります。 顧客には、CIDとpkおよび一部の属性があります。 販売では、(VID、CID)がpk、販売価格と販売日が属性として設定されています。

質問は「2014年に最も頻繁に販売された車のモデルは何ですか?ここで

は、私はまだ売上テーブルに存在するすべてのモデルを、取得私のクエリ

Select Model 
From Cars,Sales 
Where Cars.VID=Sales.VID 
Group By Cars.VID 
Having MAX((Select count(*) 
     From Cars,Sales Where Cars.VID=Sales.VID AND SellDate Between '2014-01-01' And '2014-12-30')); 

で、 は間違っているものを私に教えてもらえますか?

答えて

1

最初に:しないは、FROM句にカンマを使用します。 常には、適切なON句を使用して明示的で適切な標準JOIN構文を使用します。

あなたは一つだけ、このようなモデルをしたい場合は、最も簡単な方法はORDER BYLIMITです:

Select c.Model 
From Cars c JOIN 
    Sales s 
    on c.VID = s.VID 
where s.SellDate >= '2014-01-01' And 
     s.SellDate < '2015-01-01' 
Group By c.Model 
Order by count(*) desc 
limit 1; 

その他の注意事項:

  • GROUP BYの列はSELECTで非凝集の列と一致する必要があり、かなりいつも
  • テーブル名の略語であるテーブルエイリアスを使用します。
  • すべての列名を修飾すると、ユーザー(および他のユーザー)はどこから来たのかを知ることができます。
  • 日付演算の変更に注意してください。最後に、2014年12月31日が2014年(ビジネスルールが異なる場合がある)と聞いたことがあります。 「日付」列にもタイムスタンプがある場合、<betweenを好む。
+0

制限1は何のために使用されますか? –

+2

@antonisarvanitis、あなたが質問した原因*車のモデルとは何ですか*ではない*車のモデルは何ですか? – Rahul

関連する問題