按商店,月份和年份排名前5位

时间:2017-04-24 08:52:21

标签: mysql

我有这个sql的问题,按商店,月份和年份排名前5位

 SELECT  YEAR(t1.date_at) as year,
          MONTH(t1.date_at) as month,
          (SELECT COUNT(t2.ticket) 
           FROM sac as  t2
           WHERE MONTH(t2.date_at) = MONTH(t1.date_at)
           AND YEAR(t2.date_at) = YEAR(t1.date_at)

           ORDER BY t2.ticket DESC LIMIT 5 ) AS total
 FROM sales as  t1
 WHERE YEAR(t1.date_at) = 2017
 GROUP BY  YEAR(t1.date_at),MONTH(t1.date_at)

结果很完美:

2017|1|18977
2017|2|9846
2017|3|270

但我需要添加商店 我将商店添加到sql:

SELECT  t1.store,YEAR(t1.date_at) as year,
          MONTH(t1.date_at) as month,
          (SELECT COUNT(t2.ticket) 
           FROM sac as  t2
           WHERE MONTH(t2.date_at) = MONTH(t1.date_at)
           AND YEAR(t2.date_at) = YEAR(t1.date_at)
           AND t2.store  = t1.store
           ORDER BY t2.ticket DESC LIMIT 5 ) AS total
 FROM sales as  t1
 WHERE YEAR(t1.date_at) = 2017
 GROUP BY  t1.store, YEAR(t1.date_at),MONTH(t1.date_at)

结果是一个无限的小伙伴。

理想的结果是:

YEAR|MONTH|TOTAL|STORE
2017|1|18977|20041
2017|1|17900|345
2017|1|10000|74544
2017|1|8988|2453
2017|1|6942|1056
2017|2|9846|675
2017|2|6487|3421
2017|2|5000|165
2017|2|4785|76
2017|2|699|211
...
...
...

错误在哪里?

2 个答案:

答案 0 :(得分:0)

评论太长了。可以延伸到稍后的答案。

您的查询没有,您认为它做了什么。

但首先,问题是,为什么你甚至从销售表中读到,当你显然在囊表中有所有东西?这使得一切都变得更加复杂。

那么为什么你的查询错了? LIMIT 5适用于整个查询。你使用LIMIT子句所做的就是先计算出最高数字的门票,这完全没有意义。

你问题的标题是“按店铺,月份和年份排名前五”。要使用您的方法,您必须在子查询中添加GROUP BYLIMIT子句,但这也不会起作用,因为子查询(因为它在SELECT子句中)是不允许返回多行。

再次,您在标题中说“商店,月份和年份的前五名销售额”,但您现在的结果和现在的“理想结果”都没有反映出来。我没有看到有关“前5名”的任何信息。这就是为什么你的问题完全令人困惑的原因。

答案 1 :(得分:0)

好的,因为你可以从一个表中获取所有内容所以编写查询就像下面这样简单(这里我将表名称视为Ticket):

SELECT t1.store, MONTH(t1.date_at) as m, YEAR(t1.date_at) as y, COUNT(t1.ticket) as total
from Ticket t1 
GROUP BY t1.store,MONTH(t1.date_at),YEAR(t1.date_at)
order by COUNT(t1.ticket) DESC LIMIT 5

上述查询将获取您想要的结果: 结果:

+------+-------+------ +-------+
| store| m     | y     | total |
+------+-------+-------+-------+
| 10   | 04    | 2017  | 2     |
| 11   | 04    | 2017  | 1     |
| 11   | 03    | 2017  | 1     |
+--------+-----+------+--------+

虽然我不知道您使用的是哪种类型的数据库,但查询语法可能会根据数据库类型而改变。但查询结构将保持不变。