首页 > 解决方案 > 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

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

标签: mysql

解决方案


试试下面:你需要在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

推荐阅读