gpt4 book ai didi

mysql - CASE WHEN 查询未返回预期结果

转载 作者:行者123 更新时间:2023-11-29 01:37:15 26 4
gpt4 key购买 nike

我正在尝试从 Wordpress 数据库的 wp_usermeta 表中获取数据。

对于那些不熟悉它的人,结构如下:

umeta_id | user_id | meta_key | meta_value
1 | 1 | role | admin
2 | 1 | lat | 12.34456
3 | 1 | lng | 9.392933
4 | 2 | role | user
5 | 2 | lat | 8.694840
6 | 2 | lng | 29.32930
7 | 3 | role | subscriber
8 | 3 | lat | 32.32323
9 | 3 | lng | 3.222222
10 | 3 | some key | some value
... and so on

现在我在表中得到了一个带有纬度和经度坐标的条目,它们由 meta_key 定义为“lat”或“long”,meta_value 是坐标。

我想让每个用户都有他们的纬度和经度坐标,就像这样:

user_id | lat      | lng
1 | 12.34456 | 9.392933
2 | 8.694840 | 29.32930
3 | 32.32323 | 3.222222

为此我目前正在使用这个查询:

SELECT umeta.user_id,
max(CASE WHEN umeta.meta_key = "lat" THEN umeta.meta_value END) AS lat,
max(CASE WHEN umeta.meta_key = "lng" THEN umeta.meta_value END) AS lng
FROM wp_usermeta umeta

这只会给我:

user_id | lat      | lng
1 | 12.34456 | 9.392933

你们知道我做错了什么吗?非常感谢您的帮助!

最佳答案

您还需要按用户 ID 分组以使数据透视查询按预期工作:

SELECT umeta.user_id,
MAX(CASE WHEN umeta.meta_key = "lat" THEN umeta.meta_value ELSE 0 END) AS lat,
MAX(CASE WHEN umeta.meta_key = "lng" THEN umeta.meta_value ELSE 0 END) AS lng
FROM wp_usermeta umeta
GROUP BY umeta.user_id

我包括了一个显式的 ELSE 条件设置一个 0 值,尽管你可能不需要这个。

关于mysql - CASE WHEN 查询未返回预期结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37985161/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com