mysql - 按列重新组织表数据

标签 mysql sql pivot-table

<分区>

我有一个数据列表,我想将其从一种布局转换为另一种布局。我不完全确定从一种布局转换为另一种布局的最佳方式。我想过一次刮一个“奶酪类型”,然后加入结果。我希望有一个更优雅的解决方案。这是我得到的:

| BurgerType   | CheeseType | Slices |
|--------------|------------|--------|
| Cheeseburger | Provolone  | 2      |
| Cheeseburger | Cheddar    | 3      |
| Cheeseburger | Bleu       | 1      |
| Loosey       | Provolone  | 4      |
| Loosey       | Cheddar    | 4      |
| BlackBleu    | Bleu       | 2      |
| MONSTERNOM   | Brie       | 2      |
| MONSTERNOM   | Cheddar    | 1      |

我想把它转换成这样:

| BurgerType   | Provolone | Cheddar | Bleu | Brie |
|--------------|-----------|---------|------|------|
| Cheeseburger | 2         | 3       | 1    | 0    |
| Loosey       | 4         | 4       | 0    | 0    |
| BlackBleu    | 0         | 0       | 2    | 2    |
| MONSTERNOM   | 0         | 1       | 0    | 2    |

最佳答案

您可以使用条件聚合。 CASE 仅在奶酪类型匹配时返回切片计数,否则返回 0max() 然后取返回的最大数,即这种奶酪和汉堡的切片数。

SELECT burgertyp,
       max(CASE
             WHEN cheesetype = 'Provolone' THEN
               slices
             ELSE
               0) provolone,
       ...
       max(CASE
             WHEN cheesetype = 'Brie' THEN
               slices
             ELSE
               0) brie
       FROM elbat
       GROUP BY burgertype;

关于mysql - 按列重新组织表数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52046165/

相关文章:

java - Apache POI 添加列标签

Excel 数据透视表计算字段

c# - 使用 Entity Framework 的代码优先方法的 ASP.NET MVC 应用程序中缺少外键关系

.net - 如何捕获带有替换参数的 SQL? (.NET,SqlCommand)

excel - 计算一列是否包含并且在另一列中是唯一的

python - MySQL 列名中的通配符

sql - 当条件意外地显着降低性能时

mysql 计算有条件的子表行

java - 如何从mysql表中检索字符值?

php - 由于名称相同而从查询输出中选择第一行或将其设置为变量名