首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL查询未提供预期结果

问MySQL查询未提供预期结果
EN

Stack Overflow用户
提问于 2016-10-22 21:28:23
回答 1查看 27关注 0票数 0

我是MySQL的新手,我正在尝试解决一个项目的问题。

我有三个表:汽车、销售和客户。cars有VID作为pk和其他一些属性,比如型号和价格。customers有CID作为主键,还有一些属性。sales以(VID,CID)为主键,以销售价格和销售日期为属性。

问题是:“2014年销量最高的车型是什么?”

下面是我的问题

代码语言:javascript
复制
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'));

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

EN

回答 1

Stack Overflow用户

发布于 2016-10-22 21:34:12

第一:永远不要在FROM子句中使用逗号。始终使用显式的、正确的、标准的JOIN语法和适当的ON子句。

如果只需要一个这样的模型,最简单的方法是ORDER BY和LIMIT

代码语言:javascript
复制
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相比,我更喜欢<,以防"date“列也有时间戳。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40192724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档