如果一列中有一个相同的值,如何合并两行并更改列名

时间:2019-06-20 18:38:48

标签: mysql sql

我有这个查询

SELECT
    pm.post_id,
    pm.meta_key,
    pm.meta_value
FROM 
   birr_postmeta as pm,
   birr_posts as p
WHERE pm.meta_key IN ('ratings_average', 'ratings_users')
    AND pm.meta_value <> 0
    AND pm.post_id = p.ID
ORDER BY pm.post_id ASC

那让我回来了:

image

我要从这些表中获取的是这样的

+--------+---------------+--------------+
|post_id |  rating_users |rating_average|
+--------+---------------+--------------+
|    7   |       1       |      5       |
|   35   |       3       |      4       |
|   101  |       2       |     4.5      |
|   127  |       2       |      4       |
|   225  |       1       |      4       |
+--------+---------------+------------+

我该如何实现?

1 个答案:

答案 0 :(得分:1)

一种方法使用聚合:

SELECT pm.post_id,
       MAX(CASE WHEN pm.meta_key = 'ratings_average' THEN pm.meta_value END) as ratings_average,
       MAX(CASE WHEN pm.meta_key = 'ratings_users' THEN pm.meta_value END) as ratings_users
FROM  birr_postmeta pm 
WHERE pm.meta_key IN ('ratings_average', 'ratings_users')
      pm.meta_value <> 0
GROUP BY pm.post_id ASC;

请注意,不需要JOIN。但是,如果要使用一种,则应使用正确的JOIN语法。