gpt4 book ai didi

mysql - 选择第一行但仅当有多个匹配项时才选择?

转载 作者:行者123 更新时间:2023-11-29 08:22:45 24 4
gpt4 key购买 nike

鉴于下面的表“users”:

+----+---------+--------+
| id | name | office |
+----+---------+--------+
| 1 | David | 1 |
| 2 | Roz | 1 |
| 3 | Patrick | 2 |
| 4 | Chris | 3 |
| 5 | Agnes | 3 |
| 6 | Freya | 3 |
+----+---------+--------+

我想选择任何给定办公室的第一个用户,但仅当有多个用户时,所以:

  • 办公室 1 = 用户 1 (David)
  • 办公室 2 = NULL
  • 办公室 3 = 用户 4 (Chris)

大致如下:

SET @office_id = 2;
SELECT *
FROM `users`
WHERE `office` = @office_id AND number-of-users-for-office > 1
ORDER BY `id` ASC
LIMIT 1;

最佳答案

SELECT  a.office, 
MAX(
CASE WHEN b.ID IS NULL
THEN NULL
ELSE a.Name
END) Name
FROM Tablename a
LEFT JOIN
(
SELECT office, MIN(id) ID
FROM Tablename
GROUP BY office
HAVING COUNT(*) > 1
) b ON a.office = b.office AND
a.ID = b.ID
-- WHERE ....... -- (if you have extra conditions)
GROUP BY a.office

输出

╔════════╦════════╗
║ OFFICE ║ NAME ║
╠════════╬════════╣
║ 1 ║ David ║
║ 2 ║ (NULL) ║
║ 3 ║ Chris ║
╚════════╩════════╝

子查询的目的是获取每个Office的最少ID。额外的 HAVING 子句仅过滤在特定办公室内拥有多名员工的记录。

然后通过 LEFT JOIN

User 连接到子查询,以获取表中的所有办公室。使用MAX()(MIN())聚合记录,以获得每个办公室的单个记录。

关于mysql - 选择第一行但仅当有多个匹配项时才选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18899736/

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