【问题标题】:MySQL self join query?MySQL 自连接查询?
【发布时间】:2020-03-23 22:40:33
【问题描述】:

我有一个看起来像这样的表:

-------------------------------------
col0 | col1 | col2 | .......| col10 |
-------------------------------------
1    | A    | 2.5  | .......| 4.5   |
-------------------------------------
2    | A    | 3.5  | .......| 5.5   |
-------------------------------------
3    | A    | 4.5  | .......| 6.5   |
-------------------------------------
1    | B    | 2.5  | .......| 4.5   |
-------------------------------------
2    | B    | 3.5  | .......| 5.5   |
-------------------------------------
3    | B    | 4.5  | .......| 6.5   |
-------------------------------------
1    | C    | 2.5  | .......| 4.5   |
-------------------------------------
2    | C    | 3.5  | .......| 5.5   |
-------------------------------------

我想运行一个 SQL 查询来输出这样的表:

col0 |  A  | B   |
------------------
1    | 2.5 | 2.5 |
------------------
2    | 3.5 | 3.5 |
------------------
3    | 4.5 | 4.5 |

这是我尝试过的:

select table_a.col0,
table_a.col2 as "A" where table_a.col1="A",
table_b.col2 as "B" where table_b.col1="B"
from table as table_a inner join table as table_b
on table_a.col0=table_b.col0


select table_a.col0,
table_a.col2 as "A" where table_a.col1="A",
table_b.col2 as "B"
from table as table_a inner join table as table_b
on table_a.col0=table_b.col0 where table_b.col1="B";

为了解决语法错误,我尝试了很多不同的查询,但仍然没有运气。 SQL 新手,请帮忙。

【问题讨论】:

    标签: mysql sql pivot pivot-table self-join


    【解决方案1】:

    你可以只做条件聚合来透视你的数据集:

    select
        col0,
        max(case when col1 = 'A' then col2 end) A,
        max(case when col1 = 'B' then col2 end) B
    from mytable
    where col1 in ('A', 'B')
    group by col0
    

    查询将col0 中具有相同值的行组合在一起;然后,select 子句中的条件表达式选择与 AB 行对应的值。

    【讨论】:

    • 如果我想对具有任意数量值的行进行分组,您会建议什么,对于类似的情况是可能的,但例如行具有“A”到“Z”值?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多