mysql - 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
当前显示的数字是订单行数,但我希望它是订单数。
解决方案
试试下面:你需要在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
推荐阅读
- c# - 从文本文件中分割行,而不破坏句子
- powershell - 有没有可以添加到“.bat”文件中的标签来停止显示命令窗口
- c++ - 这个操作符方法有什么作用?
- google-apps-script - Adsense 报告 Google 表格
- boolean - 如何在表单加载的表中将是/否值设置为否以注销所有用户
- c++ - 任何人都可以像我 5 岁那样解释变量如何在函数上工作吗?
- android - 为什么 ppoll() 不等待我在 Android Pie 中的延迟?
- python - Pandas:读取 CSV 时出现强制错误
- scala - scala中错误的顶级声明声明
- visual-studio-code - 如何关闭 ESLint 规则以便代码编译?