MySQL将列转换为行

Posted

技术标签:

【中文标题】MySQL将列转换为行【英文标题】:MySQL converting columns to rows 【发布时间】:2016-10-26 09:44:44 【问题描述】:

我试图弄清楚如何计算所有总裁、经理等,然后在一个查询中将列转换为行。 例如,这里有一些示例 db 'employee':http://www.mysqltutorial.org/tryit/ 我可以使用这样的查询来计算所有类型的员工:

SELECT 
    SUM(CASE
        WHEN jobTitle = 'President' THEN 1
        ELSE 0
    END) AS 'Presidents',
    SUM(CASE
        WHEN jobTitle LIKE 'VP%' THEN 1
        ELSE 0
    END) AS 'VPs',
    SUM(CASE
        WHEN jobTitle LIKE '%Manager%' THEN 1
        ELSE 0
    END) AS 'Managers',
    SUM(CASE
       WHEN jobTitle LIKE '%Rep' THEN 1
       ELSE 0
    END) AS 'Reps'
FROM
employees;

但现在我想将列转换为行,但我不知道如何将其包含在类似于此处答案的查询中: Mysql Convert Column to row (Pivot table )

【问题讨论】:

你有方法如何完成预期的输出。你在实施它时到底在哪里卡住了?此外,您应该更加小心地提出问题,因为您所问的问题可以通过简单的“是”或“否”来回答。 此外,当您可以通过简单的 group by 和 count 获得基于行的输出时,我不明白您为什么要取消透视上述查询的结果。 【参考方案1】:

您可以使用子查询来标准化职位名称,然后使用 case 语句进行分组和排序,以按专长的降序生成输出。

select  jobtitle,count(*) from
(
SELECT  case 
        WHEN jobTitle = 'President' THEN 'Presidents'
        WHEN jobTitle LIKE 'VP%' THEN 'VPs'
        WHEN jobTitle LIKE '%Manager%' then 'Managers'
        WHEN jobTitle LIKE '%Rep' then 'Reps'
        end as Jobtitle
FROM
employees
 ) s

group   by Jobtitle
order by 
case when jobtitle = 'Presidents' then 1
 when jobtitle = 'VPs' then 2
 when jobtitle = 'Managers' then 3
 when jobtitle = 'Reps' then 4
 end

【讨论】:

以上是关于MySQL将列转换为行的主要内容,如果未能解决你的问题,请参考以下文章

将列转换为行

使用R将行转换为列,将列转换为行

SQL 将列转换为行

将列值转换为行值

Postgres 表选择多列并将结果(列)动态转换为行 - 将列转置为行

sql 将列数据转换为行