gpt4 book ai didi

MYSQL 按列分组,每组 2 行

转载 作者:可可西里 更新时间:2023-11-01 06:33:43 25 4
gpt4 key购买 nike

我需要为每个组分配 2 个 id

SELECT `id`, `category`.`cat_name` 
FROM `info`
LEFT JOIN `category` ON `info`.`cat_id` = `category`.`cat_id`
WHERE `category`.`cat_name` IS NOT NULL
GROUP BY `category`.`cat_name`
ORDER BY `category`.`cat_name` ASC

如何做到这一点?

示例数据:

id  cat_name
1 Cat-1
2 Cat-1
3 Cat-2
4 Cat-1
5 Cat-2
6 Cat-1
7 Cat-2

输出将是:

id  cat_name
6 Cat-1
4 Cat-1
7 Cat-2
5 Cat-2

最佳答案

如果你需要两个任意的 id,那么使用 min()max():

SELECT c.`cat_name` , min(id), max(id)
FROM `info` i INNER JOIN
`category` c
ON i.`cat_id` = c.`cat_id`
WHERE c.`cat_name` IS NOT NULL
GROUP BY c`.`cat_name`
ORDER BY c.`cat_name` ASC ;

注意:您正在使用 LEFT JOIN,然后按 第二个 表中的列进行聚合。这通常不是一个好主意,因为不匹配的都放在 NULL 组中。此外,无论如何,您的 WHERE 子句会将 LEFT JOIN 转换为 INNER JOIN,因此我已修复该问题。 WHERE 子句可能需要也可能不需要,具体取决于 cat_name 是否为 NULL

如果您想要两个最大或最小的 -- 并且可以忍受将它们放在同一列中:

SELECT c.`cat_name`,
substring_index(group_concat id order by id), ',', 2) as ids_2
FROM `info` i INNER JOIN
`category` c
ON i.`cat_id` = c.`cat_id`
WHERE c.`cat_name` IS NOT NULL
GROUP BY c`.`cat_name`
ORDER BY c.`cat_name` ASC ;

关于MYSQL 按列分组,每组 2 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32093420/

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