mysql - 如果列中有一个相同的值并更改列名,如何将两行合并为一
问题描述
我有这个查询
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
这还给我这个:
我想从这些表中获得的是这样的
+--------+---------------+--------------+
|post_id | rating_users |rating_average|
+--------+---------------+--------------+
| 7 | 1 | 5 |
| 35 | 3 | 4 |
| 101 | 2 | 4.5 |
| 127 | 2 | 4 |
| 225 | 1 | 4 |
+--------+---------------+------------+
我怎样才能做到这一点?
解决方案
一种方法使用聚合:
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
语法。
推荐阅读
- javascript - 调整图像大小时轮播下方的空白
- c++ - Makefile | Cleaning up after Make - Error: No such file or directory | Error: recipe for target * failed
- jquery - 根据一天中的时间添加课程
- javascript - 如何使用相对 URL 进行重定向?
- ios - 使用 WKWebView 在 iOS 13 中进行桌面浏览?
- less - LESS mixin 为 IE 自动添加 CSS 自定义属性回退
- python - 通过两个子图放置样带
- vuejs2 - VUEJS 无法在模板中使用 api 响应数据
- owl - 如何使用来自特定 ConceptScheme 的 SKOS 概念约束 OWL ObjectProperty 值?
- excel - 如何最小化我的代码的运行时间?