mysql - 对 SQL 完全陌生,需要通过汇总帮助分组
问题描述
我正在使用工作台(没有编程经验)学习 MYSQL,并且我已经成功地创建了一个总销售额和按月分组的程序。但是,我的销售总额命名为 12 月,我有 2 月 2 日。为什么是这样?我一直在寻找答案,但似乎找不到。这是我的代码:
DELIMITER //
CREATE PROCEDURE MonthlySales()
BEGIN
SELECT monthname(Date) AS MonthlySales, SUM(OrderValue) AS TotalSales
FROM customerorders
GROUP BY Month(Date) with rollup;
END //
我的输出是:
解决方案
如果您的环境/代码对此类结果的处理存在错误,您可以尝试包装查询以将值“推送”到可识别的内容(如果您只想“命名”汇总结果也适用)。
鉴于:
SELECT MONTHNAME(myDate) AS theMonth, SUM(someValue) AS total
FROM aTable
GROUP BY theMonth WITH ROLLUP
;
改成:
SELECT CASE WHEN theMonth IS NULL THEN 'Year' ELSE theMonth END AS theMonth
, total
FROM (
theQueryAbove
) AS q
;
注意:我可以使用IFNULL
orCOALESCE
代替CASE
语句,但该CASE
版本有助于扩展多字段分组......
CASE WHEN theMonth IS NULL AND theYear IS NOT NULL THEN 'Year'
WHEN theMonth IS NULL AND theYear IS NULL THEN 'Overall'
ELSE theMonth
END
编辑:如果你不想要那么多信息,并且想要保持简洁,你可以这样做COALESCE(theYear, '') AS theYear, COALESCE(theMonth, '') AS theMonth
更明确地说,这是您的特定查询应如下所示:
SELECT CASE WHEN MonthlySales IS NULL THEN 'Year' ELSE MonthlySales END AS MonthlySales
, TotalSales
FROM (
SELECT MONTHNAME(Date) AS MonthlySales, SUM(OrderValue) AS TotalSales
FROM customerorders
GROUP BY MonthlySales WITH ROLLUP
) AS q
;
推荐阅读
- python - 使用 Python 检索 Power BI 的 Rest API 的访问令牌?
- html - div内内容的排序
- linux - Linux 记录器的替代品
- oracle-cloud-infrastructure - 无法列出公共存储桶中的内容
- python - 在 NumPy 中向量化 2D 卷积
- docker - 与不同桥接网络中的多个 docker-compose.yml 通信
- markdown - 如何按顺序自动编号 MkDocs 图形
- java - Java固定线程池竞争条件?
- python-3.x - 如何使用 if 语句同时读取列表中的所有元素?
- python - 按 2 列分组并在 Pandas 中为每个组合打印数据