gpt4 book ai didi

mysql - 将多行合并为一行 MySQL 并在同一查询中将值从一个字段拆分为两个

转载 作者:行者123 更新时间:2023-11-29 03:33:17 25 4
gpt4 key购买 nike

我是 MySQL 的新手,但我已经设法为我尝试做的两件事找到了单独的解决方案,现在我只需要帮助将它们结合起来。

我有一个包含两个表的数据库:Users 和 user_profile。我设法创建了一个查询,将两个表中的数据合并到一个表中,内容如下:

select t1.id,
t1.name,
max(case when t2.`profile_key` = 'profile.address1' then t2.profile_value end) address,
max(case when t2.`profile_key` = 'profile.city' then t2.profile_value end) city,
max(case when t2.`profile_key` = 'profile.postal_code' then t2.profile_value end) postal_code,
max(case when t2.`profile_key` = 'profile.phone' then t2.profile_value end) phone
from users t1
left join user_profiles t2
on t1.id = t2.user_id
group by t1.id, t1.name

我还想将“姓名”列拆分为“名字”和“姓氏”,以便我可以按姓氏排序。我可以用这个来完成:

SELECT IF(
LOCATE(' ', `name`) > 0,
SUBSTRING(`name`, 1, LOCATE(' ', `name`) - 1),
`name`
) AS memberfirst,
IF(
LOCATE(' ', `name`) > 0,
SUBSTRING(`name`, LOCATE(' ', `name`) + 1),
NULL
) AS memberlast
FROM `users`;

有没有办法将这些要求合二为一?

最佳答案

我想我明白你想要名字和姓氏而不仅仅是名字,所以试试这个:

SELECT t1.id,
IF(
LOCATE(' ', t1.name) > 0,
SUBSTRING(t1.name, 1, LOCATE(' ', t1.name) - 1),
t1.name
) AS memberfirst,
IF(
LOCATE(' ', t1.name) > 0,
SUBSTRING(t1.name, LOCATE(' ', t1.name) + 1),
NULL
) AS memberlast ,
MAX(CASE WHEN t2.`profile_key` = 'profile.address1' THEN t2.profile_value END) address,
MAX(CASE WHEN t2.`profile_key` = 'profile.city' THEN t2.profile_value END) city,
MAX(CASE WHEN t2.`profile_key` = 'profile.postal_code' THEN t2.profile_value END) postal_code,
MAX(CASE WHEN t2.`profile_key` = 'profile.phone' THEN t2.profile_value END) phone
FROM users t1
LEFT JOIN user_profiles t2
ON t1.id = t2.user_id
GROUP BY t1.id, t1.name

关于mysql - 将多行合并为一行 MySQL 并在同一查询中将值从一个字段拆分为两个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27306109/

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