mysql 是否可以进行这样的查询?

5fjcxozz  于 2023-03-07  发布在  Mysql
关注(0)|答案(2)|浏览(83)

我在mySQL db上有这样一个表:
| 奥林匹克|体育|纪律|范畴|
| - ------|- ------|- ------|- ------|
| 伦敦2012|田径|100米|男子|
| 伦敦2012|田径|100米|女人|
| 北京2008|田径|200米|男子|
| 北京2008|田径|200米|妇女|
| 2004年雅典|田径|800米|男子|
| 2004年雅典|田径|800米|妇女|
等等。我不知道我是否可以建立这样的查询,但是我希望得到如下结果:
| 纪律|范畴|伦敦2012|北京2008|2004年雅典|
| - ------|- ------|- ------|- ------|- ------|
| 100米|男子|是的|没有|是的|
| 100米|妇女|是的|是的|没有|
| 200米|男子|是的|没有|是的|
| 200米|妇女|是的|是的|没有|
| 800米|男子|是的|是的|是的|
| 800米|妇女|是的|是的|是的|
也就是说,对于那个奥运会版本,审判是否存在。

nzk0hqpo

nzk0hqpo1#

是的,你可以,像这样使用CASE,

Select Disciplina, Categoria, 
CASE when Olimpiade = 'London 2012' then 'yes' else 'no' end as 'London 2012', 
CASE when Olimpiade = 'Beijing 2008' then 'yes' else 'no' end as 'Biejing 2008',
CASE when Olimpiade = 'Athens 2004' then 'yes' else 'no' end as 'Athens 2004'    from tableName group by Disciplina, Categoria order by Disciplina, Categoria
slsn1g29

slsn1g292#

可以使用内部选择生成查询。内部选择通过添加列来准备数据。外部选择对数据进行分组:

SELECT
    Disciplina,
    Categoria,
    IF (MAX(`London 2012`) > 0, 'yes', 'no') AS 'London 2012',
    IF (MAX(`Beijing 2008`) > 0, 'yes', 'no') AS 'Beijing 2008',
    IF (MAX(`Athens 2004`) > 0, 'yes', 'no') AS 'Athens 2004'
FROM
    (
        SELECT 
            Disciplina, 
            Categoria, 
            IF (Olimpiade = 'London 2012', 1, 0) AS 'London 2012',
            IF (Olimpiade = 'Beijing 2008', 1, 0) AS 'Beijing 2008',
            IF (Olimpiade = 'Athens 2004', 1, 0) AS 'Athens 2004'
        FROM YourTableName
    ) AS Games
GROUP BY Disciplina, Categoria
ORDER BY Disciplina, Categoria

必须用表的名称替换YourTableName

相关问题