我是MySQL新手,我正在尝试为项目解决问题。
我有三张桌子:汽车,销售和客户。 汽车有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'));
我仍然得到销售表中存在的所有模型, 可以告诉我出了什么问题吗?
答案 0 :(得分:1)
首先:从不在FROM
子句中使用逗号。 始终使用明确,正确,标准的JOIN
语法和适当的ON
子句。
如果您只想要一个这样的模型,最简单的方法是ORDER BY
和LIMIT
:
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
中的未聚合列匹配,非常始终。 <
到between
,以防&#34; date&#34;列也有时间戳。