具有不同和最大值的MYSQL查询
Posted
技术标签:
【中文标题】具有不同和最大值的MYSQL查询【英文标题】:MYSQL Query with distinct and max 【发布时间】:2012-06-30 03:46:09 【问题描述】:我需要一个 mysql 查询,它将选择“to”或“from”列中包含“joe”的所有行。它需要在“to”和“from”列之间区分,这意味着名称出现的顺序无关紧要。即“joe”、“bob”应与“bob”、“乔”。如果一对名称中有重复项,请选择具有最大 id 的名称。决赛桌也应该按 id 降序排序。例如,对下表运行查询:
之前:
id to from
---|-----|------
1 | joe | bob |
2 | bob | hal |
3 | joe | joe |
4 | sue | joe |
5 | bob | bob |
6 | bob | joe |
7 | hal | hal |
8 | joe | bob |
之后:
id to from
---|-----|------
8 | joe | bob |
4 | sue | joe |
3 | joe | joe |
【问题讨论】:
【参考方案1】:尝试使用 GROUP BY,按字母顺序进行分组(从、到):
SELECT id, `from`, `to`
FROM yourtable
WHERE id IN
(
SELECT MAX(id)
FROM yourtable
WHERE `from` = 'joe' OR `to` = 'joe'
GROUP BY LEAST(`from`, `to`), GREATEST(`from`, `to`)
)
ORDER BY id DESC
在线查看:sqlfiddle
【讨论】:
我是不是误读了这个问题 - 但不是像 SELECT DISTINCT * FROM table WHERE to='joe' OR from='joe' 这样简单的 OP 原始问题的答案 @AdrianCornish:返回 5 行而不是 OP 所需的 3 行。自己看:sqlfiddle.com/#!2/fc622/5 你是对的 - 我错了 - 抱歉是在阅读他的问题而不是查看他的预期结果集 - 现在我明白了 GROUP BY 的原因 我有时认为自己是一名 SQL 专家 - 从未与LEAST
和 GREATEST
打过交道。太棒了!【参考方案2】:
嗯...我可以接近:
SELECT inside.id, inside.`to` , inside.`from`
FROM (
SELECT MAX( id ) id, `to` , `from`
FROM people
WHERE `to` = 'joe'
OR `from` = 'joe'
GROUP BY `to` , `from`
)inside
ORDER BY inside.id DESC
但这并不能完全给出你想要的结果,因为在交换 to 和 from 时它仍然有欺骗。
我正在尝试使用一些 UNION
,但这实际上使问题复杂化,因为它最终会创建更多独特的列(我会交换 to
和 from
的顺序以让所有 joe 进入同一列)。一旦你得到了正确的唯一行而不考虑 to
和 from
的重要性,就很难将它返回到 to
和 from
不重要的地方。
也许这会让你开始思考,而我对此感到困惑。
【讨论】:
以上是关于具有不同和最大值的MYSQL查询的主要内容,如果未能解决你的问题,请参考以下文章
通过显示错误 3065(HY000) 具有不同和顺序的 MySQL 查询