Mysql:按多个字段对数据进行分组

标签 mysql group-by case

我有一个这样的mysql表

id       criteria1    criteria2   amount
1           'a'          'b'         100
2           'a'          'c'          20
3           'd'          'b'          30

我需要以最终输出应该是这样的方式编写一个分组查询

criteriaMatch      sum(amount)
criteria2 = b         130
criteria1 = a         120

id 为 1 的数据在两种情况下都有重叠。

我如何实现这一点?

我尝试使用 mysql 大小写。但在那种情况下,当第一个条件匹配时,数据会跳过第二个条件,我得不到预期的结果。

最佳答案

您可以创建 2 个单独的查询,第一个仅按标准 1 分组,第二个仅按标准 2 分组,并在每个查询中添加适当的过滤器。所以,像这样:

select criteria1 'Criteria',sum(amt)
from yourtable
where (criteria1 = 'a')
group by criteria1
union
select criteria2 'Criteria',sum(amt)
from yourtable
where (criteria2 = 'b')
group by criteria2

关于Mysql:按多个字段对数据进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22626692/

相关文章:

php - 发生数据库错误错误号: 1066 Not unique table/alias:

mysql - 删除重复行并将删除的行值添加到保留的行

mysql - 如何通过比较更新mysql cols

MySql 使用 CASE 从另一个表中插入子字符串

mysql - 如何在单个 mysql select 语句中使用多个 where 子句?

php - 在类中使用类?

mysql - 自动更改枚举列

mysql - 两个 SUM 和两个 GROUP BY

mysql - 当条件位于不同行和列时的 CASE 语句

mysql - 如何让 SQL SELECT 只显示在 WHERE 子句中触发结果的列