mysql - 如何将此 mysql 表转换为数据透视表?

标签 mysql sql pivot

我有一张看起来像这样的 table 。

ID_ACTIVITY    ID_CLASS    EXEC_VALUE
    ACT_III           A           450
      ACT_I           B           550
     ACT_II           A           750
    ACT_III           B           550
     ACT_II           A           650
      ACT_I           A           750
      ACT_I           B           750
    ACT_III           A           950
    ACT_III           A           150

我想根据此表创建一个报告到某种数据透视表中。这应该是报告输出

ID_ACTIVITY     A_COUNT     B_COUNT    AB_SUM
      ACT_I           1           2      2050             
     ACT_II           2        NULL      1500
    ACT_III           3           1      2100

注意:

  • A_COUNTB_COUNT 根据 ID_CLASS 中的值动态变化
  • AB_SUM 基于每个ID_CLASS 中每个ID_ACTIVITYEXEC_VALUE 的值

我已经使用 PHP 完成了它,但我想知道是否可以用 MySQL 方式完成它,并且生成大约数千个数据是否更快?

最佳答案

您可以进行条件聚合:

select 
    id_activity,
    sum(case when id_class = 'A' then 1 end) a_count,
    sum(case when id_class = 'B' then 1 end) b_count,
    sum(exec_value) ab_sum
from mytable
group by id_activity

关于mysql - 如何将此 mysql 表转换为数据透视表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59083847/

相关文章:

php - 在 php 或 mysql 中使用数字中的内部数组对数组进行排序

mysql - 如何在 MySql 中选择今天之前的最新日期?

mysql - sql查询使用mysql将字符串中的最后一个字母带到第一个字母位置

mysql - 按 MYSQL 中搜索次数最多的单词排序

mysql 数据透视表不计算日期列

sql - select * from tablename 和 select column1, column2 from tablename 之间有性能差异吗?

mysql - 从具有不同日期布局的 mysql 数据库中按日期选择最近 7 天的 PHP 数据

java - 如何将日历转换为 DD-Mon-YY 格式和奇怪的查询结果

Sql Pivot 和 Sql 案例中的 Sql ISNULL 条件

python - 将 pandas 列转置为一行,使用另一列作为索引