mysql按查询分组(非常接近)

时间:2018-09-06 06:55:20

标签: mysql

我有3张桌子(简体):

  
      
  • 订单(订单编号,日期)
  •   
  • 订单行(lineid,orderid,userid)
  •   
  • 用户(用户名,名称)
  •   

我想要一个按用户名按年和月订单分组的每个用户的订单数量列表。订单行具有用户ID的原因是,其他用户可以更改订单行。以下列出了订单行数,但只需要计算订单数即可:

SELECT 
  users.name, 
  COUNT(orders.orderid) AS number, 
  MONTH(orders.date) AS month, 
  YEAR(orders.date) AS year
FROM orders
INNER JOIN orderlines ON orders.orderid = orderlines.orderid
INNER JOIN users ON orderlines.userid = users.userid
GROUP BY orderlines.userid, YEAR(order.date), MONTH(order.date)
ORDER BY users.name, orders.date

我感觉我很近...

当前输出为:

name | number | month | year 
---------------------------- 
jeff | 1000   | 1     | 2018  
jeff | 1100   | 2     | 2018

应该是:

name | number | month | year 
---------------------------- 
jeff | 100    | 1     | 2018  
jeff | 110    | 2     | 2018

当前显示的数字是订单行的数量,但我希望它是订单的数量。

1 个答案:

答案 0 :(得分:2)

尝试以下操作:您需要在group by中使用users.name,也应该按照您的问题说的那样在您的order by子句中使用,另一件事是您想知道每个用户的订单数,因此应该被计算为不同的订单编号

SELECT users.name, COUNT(distinct orders.orderid), MONTH(orders.date), YEAR(orders.date)
FROM orders
INNER JOIN orderlines ON orders.orderid = orderlines.orderid
INNER JOIN users ON order lines.userid = users.userid
GROUP BY users.name, YEAR(order.date), MONTH(order.date)
ORDER BY users.name