gpt4 book ai didi

sql - 尝试连接表并按一个不同的最大值进行选择

转载 作者:行者123 更新时间:2023-11-29 09:18:00 24 4
gpt4 key购买 nike

我试图从 3 个连接表中提取多列,但我希望结果集每个 p.id 仅包含一个不同的“数据条目”( pet id,它是数据输入表中的外键)。我遇到的问题是,可能有两个数据条目,编号为 1 和 2,属于宠物 - 查询必须只选择编号最高的数据条目 - 这就是我尝试使用 max 和 group by 的原因,但它不太管用。谁能看到我哪里出错了?非常感谢

SELECT `p`.`id`, `o`.`id`, `o`.`email`, MAX(d.number), `d`.`number`
FROM (`pets` AS `p`, `owners` AS `o`, `data_entries` AS `d`)
WHERE `p`.`owner_id` = `o`.`id`
AND `p`.`id` = `d`.`pet_id`
GROUP BY `p`.`id`
ORDER BY `d`.`number` DESC

编辑:按照iniju的建议,我尝试了以下查询,但这并没有过滤掉数字低于同一宠物的另一个数据条目的数据条目:

SELECT `p`.`id`, `o`.`id`, `o`.`email`, `d`.`number`
FROM (`pets` AS `p`, `owners` AS `o`, `data_entries` AS `d`)
WHERE `p`.`owner_id` = `o`.`id`
AND `p`.`id` = `d`.`pet_id`
GROUP BY `p`.`id`, `o`.`id`, `o`.`email`, `d`.`number`
HAVING `d`.`number`=MAX(`d`.`number`)

最佳答案

分组时不能同时选择数量和最大数量。这是因为 MAX 函数基于分组的聚合。在您的情况下,您还选择列本身,这将为每个不同的数字创建一行...而不是每个不同的 MAX 数字。

假设您有 4 行:

PET    NUMBER
A 1
A 2
B 4
B 2

您希望结果集是:

PET  MAX
A 2
B 4

或者您希望它是:

PET  NUM  MAX
A 1 2
A 2 2
B 4 4
B 2 4

区别在于,一个已分组并聚合,而另一个未分组但包含聚合列。

我建议您从 SELECT 语句中删除 d.number,只保留 MAX(d.number)当且仅当 o.ido.email 是唯一的时,这才能解决您的问题p.id

的连接记录

试试这个:

SELECT `p`.`id`, `o`.`id`, `o`.`email`, MAX(d.number)
FROM `data_entries` AS `d`
JOIN `pets` `p` ON `p`.`ID` = `d`.`pet_id`
JOIN `owners` `o` ON `o`.`ID` = `p`.`owner_id`
GROUP BY `p`.`id`, `o`.`id`, `o`.`email`
ORDER BY MAX(d.number) DESC

关于sql - 尝试连接表并按一个不同的最大值进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3472415/

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