是否可以使用 MySQL 以这种方式对行进行分组?

2022-08-30 20:39:10

我有一个MySQL表,如:

ID, USER, PARAM, VAL
--------------------
1 | 1 | NAME | ADAM
2 | 1 | AGE  | 15
3 | 2 | NAME | EVA
4 | 2 | AGE  | 16
5 | 3 | NAME | CRISS
6 | 3 | AGE  | 14

我很好奇是否有一个查询会给我类似的东西:

1 | ADAM | 15
2 | EVE  | 16
3 | CRISS| 14

到目前为止,我只是使用以下查询并将记录分组到一个循环中。

SELECT * FROM table WHERE PARAM ='NAME' OR PARAM = 'AGE'

我试图使用,但没有成功。GROUP


答案 1

对同一表使用联接:

SELECT a.USER user_id, a.VAL user_name, b.VAL user_age
FROM `table` a
INNER JOIN `table` b ON a.USER = b.USER
WHERE a.PARAM = 'NAME'
AND b.PARAM = 'AGE'

结果:

user_id     user_name   user_age
1           ADAM        15
2           EVA         16
3           CRISS       14

答案 2

无需使用 JOIN。试试这个:

SELECT USER,
       MAX(CASE PARAM WHEN 'NAME' THEN VAL ELSE NULL END) AS NAME,
       MAX(CASE PARAM WHEN 'AGE' THEN VAL ELSE 0 END) AS AGE
FROM test 
GROUP BY USER;

推荐