mysql - Mysql按月获取计数并分组
问题描述
我正在尝试检索按数量划分为数月的结果。我几乎可以使用它,但我需要实际数量,它返回表中的条目数,而不是值。我的表格和数据如下所示:
table products {
int oid
datetime date
}
table orders {
int oid
int qty
}
products
1, 2018-01-01
2, 2018-01-01
3, 2020-01-
4, 2020-02-01
}
orders
1, 1,
2, 4
3, 2
4, 3
}
我运行的命令是
select YEAR(p.date), MONTH(p.date), COUNT(o.qty)
FROM products p left join orders o using (oid)
GROUP BY YEAR(p.date), MONTH(p.date)
我得到的结果是
2018 1 2
2020 1 1
2020 2 1
他们应该在哪里
2018 1 5
2020 1 1
2020 2 1
有人可以解释一下如何按月获得正确的数量吗?
解决方案
你似乎想要sum()
:
SELECT YEAR(p.date), MONTH(p.date), SUM(o.qty)
FROM products p LEFT JOIN
orders o
USING (oid)
GROUP BY YEAR(p.date), MONTH(p.date);
编辑:
看起来您想将缺失qty
值处理为1
. 只需使用coalesce()
:
SELECT YEAR(p.date), MONTH(p.date), SUM(COALESCE(o.qty))
FROM products p LEFT JOIN
orders o
USING (oid);
这是一个 db<>fiddle。
GROUP BY YEAR(p.date), MONTH(p.date)
推荐阅读
- python - 在python中操作文本文件
- ios - 收到错误 MFMailComposeViewController: Filtering mail sheet accounts for bundle ID
- react-native - onLoadEnd 没有在本机反应中触发
- android - Android相机在某些设备中提供旋转捕获的图像
- python-sockets - 客户端突然关闭程序后客户端套接字停止工作
- templates - Mandrill — 如何格式化车把模板的复杂数据
- c# - WebBrowser 编码 UTF-8
- apache-spark - 如何在 Spark 数据框中连接条件?
- java - 当 java.net.preferIPv4Stack=true 时,无法将 InetAddress.isReachable(timeout) 用于 IPv6
- variables - 根据现有变量计算Stata中的新变量