MySQL查询没有给出预期的结果

时间:2016-10-22 13:28:23

标签: mysql

我是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'));

我仍然得到销售表中存在的所有模型, 可以告诉我出了什么问题吗?

1 个答案:

答案 0 :(得分:1)

首先:从不FROM子句中使用逗号。 始终使用明确,正确,标准的JOIN语法和适当的ON子句。

如果您只想要一个这样的模型,最简单的方法是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,以防&#34; date&#34;列也有时间戳。