gpt4 book ai didi

mysql - 仅在符合 ON 条件的行上使用 MAX

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

如何修改以下查询以限制来自 choice 的添加每个 nid 只有一行,该领域值(value)最高的foo ?即choice中有多行与相同的表 nid , 我想要最高的 foo每个 nid加入node .

SELECT *
FROM `node`
LEFT JOIN `choice` ON node.nid = choice.nid

最佳答案

SELECT *
FROM node
LEFT JOIN choice c USING (nid)
WHERE (c.nid, c.foo) IN (SELECT nid, max(foo) FROM choice GROUP BY nid);

Try it out on SQLFiddle .


编辑:

谈论将 bar 添加到列表中。

在子查询中,我为每个 nid 找到了 MAX(foo),因此 GROUP BY nid。按原样添加 bar 没有逻辑,您应该对该列使用聚合或将其包含到 GROUP BY 中。正是 MySQL“扩展”(我个人认为它容易出错)允许你做这样的事情。我假设 MySQL 在幕后执行 MAX(bar) 操作。如果您要运行查询:

mysql> SELECT nid, max(foo), max(bar) FROM choice GROUP BY nid;
+------+----------+------+
| nid | max(foo) | bar |
+------+----------+------+
| 1 | 3 | Uno |
| 2 | 1 | Eins |
+------+----------+------+

您会看到,MAX(foo)MAX(bar) 取自不同的行。将输出与以下内容进行比较:

SELECT nid, max(foo), bar FROM choice GROUP BY nid;

一旦 nid + foo 组合在 choice 中是唯一的,我建议不要添加更多值进入子查询。否则需要改变整体方法。

关于mysql - 仅在符合 ON 条件的行上使用 MAX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10458972/

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