gpt4 book ai didi

MySQL group by 左连接

转载 作者:行者123 更新时间:2023-11-29 05:04:14 25 4
gpt4 key购买 nike

我正在尝试做一个非常复杂的查询(至少对我来说非常复杂,对你来说不是 :))

我有用户和评论表。

SQL fiddle :http://sqlfiddle.com/#!9/b1f845/2

select user_id, status_id from comments where user_id in (2,3);
+---------+-----------+
| user_id | status_id |
+---------+-----------+
| 2 | 10 |
| 2 | 10 |
| 2 | 10 |
| 2 | 7 |
| 2 | 7 |
| 2 | 10 |
| 3 | 9 |
| 2 | 9 |
| 2 | 6 |
+---------+-----------+

如果我用

select user_id, status_id from comments where user_id in (2,3)

它返回了很多重复的值。

如果可能,我想得到什么。

如果您看到 status_id = 10 多次出现 user_id= 2,3 and 4 and 2。所以从这里我想获得最新的 user_id (唯一)的最大值,例如,

user_id = 4 and 2 现在是主要的复杂部分。我现在想在一列中获取 user_id= 4 和 2 的用户信息,这样最后我可以得到类似这样的信息

status_id |  userOneUserName | userTwoUserName
10 sadek4 iamsadek2
---------------------------------------------
7 | iamsadek2 | null
---------------------------------------------
9 . | iamsadek2 | sadek2
---------------------------------------------
6 | iamsadek2 | null

我怎样才能实现这么复杂的事情。目前我必须使用应用程序逻辑来完成它。

感谢您的宝贵时间。

最佳答案

我想这可能就是您真正想要的:

SELECT DISTINCT
status_id,
(SELECT MAX(user_id) FROM comments c2 WHERE c1.status_id = c2.status_id) user_1,
(SELECT user_id FROM comments c2 WHERE c1.status_id = c2.status_id
ORDER BY user_id LIMIT 1 OFFSET 1) user_2
FROM comments c1
WHERE user_id IN (2,3);

enter image description here

Demo

(您的更新 fiddle )

我们可以使用相关子查询为每个 status_id 找到最大 user_id 和倒数第二个 user_id,然后旋转每个那些作为两个单独的列。在这里使用 GROUP_CONCAT 方法可能更可取,因为它还可以让您轻松地将任意数量的用户容纳为 CSV 列表。

此外,如果您使用的是 MySQL 8+ 或更高版本,那么我们可以利用排名分析功能,这也会更容易。

关于MySQL group by 左连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51749862/

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