如何将列名打印为mysql中的行数? [复制]
Posted
技术标签:
【中文标题】如何将列名打印为mysql中的行数? [复制]【英文标题】:How to print column names as count of rows in mysql? [duplicate] 【发布时间】:2021-02-13 04:54:35 【问题描述】:我有下表
opposition | dismissals
--------------+-------------
Australia | lbw
South Africa | run_out
England | bowled
Australia | run_out
England | lbw
我想打印输出如下
Opposition | lbw | run_out | bowled
--------------+-------+----------+-------
Australia | 1 | 1 | 0
England | 1 | 0 | 1
South Africa | 0 | 1 | 0
我不知道如何使用行值作为列名和打印相应的计数。任何人都可以在mysql中建议如何做到这一点?我现在被这个问题困扰了好几天。甚至尝试谷歌搜索,但我找不到任何东西。
【问题讨论】:
这被称为“透视”,以便您将来需要在 Google 上搜索这个。这里有很多答案:How can I return pivot table output in MySQL? 谢谢...我很高兴知道... :) 【参考方案1】:考虑到 dismissals
列的明显选择值可能不同,动态旋转可能比静态旋转更好,例如
SET @sql = NULL;
SELECT GROUP_CONCAT(
CONCAT('SUM( dismissals =''', dismissals, ''' ) AS ',dismissals)
)
INTO @sql
FROM ( SELECT DISTINCT dismissals FROM tab ) t;
SET @sql = CONCAT('SELECT opposition,',@sql,' FROM tab GROUP BY opposition');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Demo
【讨论】:
【参考方案2】:使用条件聚合。在 MySQL 中:
select opposition,
sum(dismissals = 'lbw' ) lbw,
sum(dismissals = 'run_out') run_out,
sum(dismissals = 'bowled' ) bowled
from mytable
group by opposition
【讨论】:
谢谢您的回答...但我有一个疑问,不应该在每个列名之前都有“as”关键字... ... sum(dismissals ='lbw') AS lbw 等等....我不确定只是问... @John:这个关键字是可选的。 哦,好吧....我是新手,所以不知道...谢谢您的澄清...以上是关于如何将列名打印为mysql中的行数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章