首页 > 解决方案 > 仅替换分组行的值

问题描述

我有以下示例数据:

日期 数量 类型 分组值
2021-03-01 10 1
2021-03-04 15 3
2021-03-16 32 4
2021-03-16 1 2 一个
2021-03-16 4 3 一个
2021-03-16 48 4 一个

我的预期结果是:

日期 数量 类型 分组值
2021-03-01 10 1
2021-03-04 15 3
2021-03-16 32 4
2021-03-16 53 9 一个

使用以下查询:

SELECT date, SUM(amount), type, grouping_value 
FROM table
GROUP BY date, grouping_value

该查询仍未经测试,但应适用于除一项之外的所有要求。从结果中可以看出,查询应该按日期和分组值分组。所以我输入数据的前三行将保持原样,其他三行将在一个动作中分组。我想要做的是:当某些行被分组时,显示 9 作为类型而不是被分组的类型之一。如果一行未分组,则显示原始类型。分组的条件是 grouping_value 不为空。如果它只是分组,我怎么能告诉mysql替换?

标签: mysql

解决方案


用于COUNT(*)判断该行是否在一个组中。

SELECT date, SUM(amount), IF(COUNT(*) > 1, 9, MAX(type)) AS type, grouping_value 
FROM table
GROUP BY date, grouping_value

推荐阅读