我是MySQL的新手,我正在尝试解决一个项目的问题。
我有三个表:汽车、销售和客户。cars有VID作为pk和其他一些属性,比如型号和价格。customers有CID作为主键,还有一些属性。sales以(VID,CID)为主键,以销售价格和销售日期为属性。
问题是:“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'));我仍然可以得到销售表中存在的所有型号,可以告诉我哪里出了问题吗?
发布于 2016-10-22 21:34:12
第一:永远不要在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相比,我更喜欢<,以防"date“列也有时间戳。https://stackoverflow.com/questions/40192724
复制相似问题