mysql - Mysql SELECT 查询 group by 与 sum 和 avg
问题描述
如果我添加了“按日期分组”,则 sum 或 avg 函数不起作用。
这是一张桌子
| date | calories |
|-------------------------|
| 2021-03-28 | 42.50 |
| 2021-03-30 | 500.00 |
| 2021-03-31 | 35.00 |
| 2021-04-01 | 200.00 |
| 2021-04-01 | 35.00 |
这是创建查询
SELECT CONCAT(round(IF(avg(up.calories), avg(up.calories), 0), 2), "kcal") as avg, CONCAT(round(IF(SUM(up.calories), SUM(up.calories), 0), 2), "kcal") as total_burned
FROM `tbl` as `up`
WHERE `date` BETWEEN "2021-03-28" AND "2021-04-03"
AND `calories` != '0'
GROUP BY `date`
以下是我的查询结果
| avg | total_burned |
|-----------------------------|
| 42.50 | 42.50 |
| 500.00 | 500.00 |
| 35.00 | 35.00 |
| 235.00 | 235.00 |
但实际上,我想要这种类型的结果
| avg | total_burned |
|-----------------------------|
| 203.13 | 812.50 |
解决方案
自己滚
DROP TABLE IF EXISTS T;
create table t( date date, calories decimal(10,2));
insert into t values
( '2021-03-28' , 42.50 ),
( '2021-03-30' , 500.00 ),
( '2021-03-31' , 35.00 ),
( '2021-04-01' , 200.00 ),
( '2021-04-01' , 35.00 );
select sum(calories) sumcal,sum(calories) / count(distinct date) calcavg, avg(calories)
from t;
+--------+------------+---------------+
| sumcal | calcavg | avg(calories) |
+--------+------------+---------------+
| 812.50 | 203.125000 | 162.500000 |
+--------+------------+---------------+
1 row in set (0.002 sec)
推荐阅读
- c - 从 Raspberry PI Pico RP2040 开始 - blink.c C 中的低级编程
- python - 我需要摆脱 unnamed: 0 title of column in dataframe 我正在从中创建数据库。但我做不到
- apple-m1 - Auto-sklearn 是否可用于苹果芯片?
- string - 有没有办法在vscode的飞镖中自动关闭花括号以进行字符串插值?
- java - 如果运行时没有类型,如何可能出现 ArrayStoreException?
- r - R:如何使用 h2o(.ai) randomForest 的对齐设置从游侠获得相同(高质量)的结果
- spring - Spring Boot:这些日志是什么意思?
- mongodb - IntelliJ 数据库浏览器不适用于本地主机 Mongo 4.4.3
- java - 可以用 Java 为 Kotlin 应用程序开发 Android 测试吗?Java 应用程序中的 Kotlin 测试怎么样?
- css - 按钮在较小的屏幕上更改位置 - 如何将其居中而不是“margin-left:0”?