我是 MySQL 新手,我正在尝试解决一个项目的问题。
我有三个表:汽车、销售和客户。 汽车有 VID 作为 pk 和一些其他属性,如型号和价格。 客户有 CID 作为 pk 和一些属性。 sales 将 (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'));
我仍然得到销售表中存在的所有型号, 能告诉我出了什么问题吗?
最佳答案
首先:切勿在 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
中的未聚合列匹配,几乎总是。- 使用表名称缩写的表别名。
- 限定所有列名称,以便您(和其他人)知道它们的来源。
- 注意日期算术的变化。我上次听说,2014年12月31日是2014年(你们的业务规则可能不同)。我更喜欢
<
至between
,以防“日期”列也有时间戳。
关于MySQL 查询未给出预期结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40192724/