如何在 mysql 中正确设置 MIN 和 MAX?
Posted
技术标签:
【中文标题】如何在 mysql 中正确设置 MIN 和 MAX?【英文标题】:How to properly MIN and MAX in mysql? 【发布时间】:2021-11-27 00:38:35 【问题描述】:我有以下疑问:
SELECT DISTINCT
MIN(re1.name, re2.name) AS name1,
MAX(re1.name, re2.name) AS name2
FROM Rating ra1 JOIN Reviewer re1
ON re1.rID = ra1.rID
CROSS JOIN
Reviewer re2 JOIN Rating ra2 ON re2.rID = ra2.rID
WHERE ra1.mID = ra2.mID
AND re1.rID != re2.rID
AND re1.rID > re2.rID
ORDER BY name1, name2;
当我在当前使用的学习平台(使用 sqlite)中运行查询时,它会按字母顺序计算耦合名称列表。
但是,如果我在 x86_64 上使用 mysql Ver 8.0.26 for Linux 在 vscode 中运行相同的查询 我收到以下错误:
您的 SQL 语法有误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的 ', re2.name) AS name1, MAX(re1.name, re2.name) AS name2 FROM Rating ra1' 附近使用正确的语法
mysql 中的 MIN MAX 使用方式不同吗?如何使用 mysql 运行相同的查询?
谢谢
【问题讨论】:
MIN()
和 MAX()
聚合行,而不是列。因此,它们接受单个参数。
2) 错误信息是正确的。
3) 你想做什么?!? minimal reproducible example 会有所帮助。
我想主要问题是为什么这个相同的查询在 sqlite 中运行并获取显示的列表以及为什么它在 mysql 中出现错误
@goldenfish:同样的问题可能适用于2CV
和Mercedes 500 sel coupe
。两者都是汽车,但不同的汽车。 MySQL 和 SQLite 也是不同的数据库。
【参考方案1】:
MAX()
用于检查同一列,聚合在多行中。我想你想要GREATEST()
函数。
【讨论】:
和LEAST()
而不是MIN()
。
感谢您的建议,确实,使用least
和greatest
工作正常,但是有没有办法在mysql 中运行上面显示的查询(在sqlite 中工作)?
再次感谢,我想我现在明白了,在 sqlite 中可以在 MIN
和 MAX
聚合器中使用多个变量,但在 mysql MIN
MAX
中只接受一个变量有一段时间,因为正如您所提到的,他们检查的是每列而不是一组值,对吗?
是的。 MySql(一次)遵循该领域的标准,Sqlite 不是。这在 SQL 语言中很常见:每个数据库平台都有自己的方言,这些方言大多与其他平台兼容,并且在数据库之间移动总是需要在方言之间进行一些翻译。
我明白了,我的整体困惑是由于我正在学习的基于 sqlite 的实际课程。最好知道这些句法差异从一开始就至关重要,干杯以上是关于如何在 mysql 中正确设置 MIN 和 MAX?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 mysql 查询中存储对象 max(date) 和 min(date)
如何在 Python 中规范化来自 Mysql 的数据挖掘 Min Max