MySQL中MIN/MAX函数用法和SQLite有何差异?如何解决相关报错?
问题解答
差异原因
SQLite和MySQL的MIN、MAX函数确实存在用法差异:
- SQLite的
MIN()/MAX()支持两种使用场景:一是作为聚合函数接收单个字段,统计分组内的最小/最大值;二是作为标量函数接收多个参数,直接返回多个参数中的最小/最大值。你语句中使用的MIN(re1.name, re2.name)就是SQLite独有的多参数标量用法。 - MySQL中的
MIN()/MAX()仅作为聚合函数设计,只能接收单个参数,不支持多参数直接传入,因此会触发语法报错。
适配MySQL的调整方案
MySQL提供了专用于多值比较的标量函数LEAST()和GREATEST(),作用是接收多个参数后返回其中的最小/最大值,且支持字符串类型按照字符集排序规则比较大小,完全匹配你的业务需求。你只需要把原语句中的多参数MIN替换为LEAST、多参数MAX替换为GREATEST即可,调整后的语句如下:
SELECT DISTINCT LEAST(re1.name, re2.name) AS name1, GREATEST(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版本完全一致,运行后可得到相同的按字母顺序排序的成对用户名列表。
内容的提问来源于stack exchange,提问作者goldenfish
相关产品推荐
相关产品推荐

