有没有办法在mysql的where子句中使用像min这样的sql函数作为值?

Posted

技术标签:

【中文标题】有没有办法在mysql的where子句中使用像min这样的sql函数作为值?【英文标题】:Is there a way to use sql functions like min as values in where clause of mysql? 【发布时间】:2021-04-28 07:02:45 【问题描述】:

我的 mysql 语句有问题...答案是从一个名为 station 的表中获取城市的名称和最小长度的城市长度,该表按城市名称的字母顺序排列我尝试了一些如下所述的语句.

SELECT City, LENGTH(City) FROM Station ORDER BY City WHERE LENGTH(City) = MIN(LENGTH(City));

我也尝试过使用用户定义的变量,如下所示:

SELECT @min := MIN(LENGTH(City)) FROM Station ORDER BY City;

SELECT City, LENGTH(City) FROM Station ORDER BY City WHERE LENGTH(City) = @min;

样本输出:Amo 3

它显示此错误:查看与您的 MySQL 服务器版本相对应的手册,以了解在 'WHERE LENGTH(City) = @min' 附近使用的正确语法

但它不起作用请帮助

【问题讨论】:

欢迎来到 SO。请参阅Why should I provide an MCRE for what seems to me to be a very simple SQL query - 并注意您可能需要 CHAR_LENGTH。 我认为你不能在 where 之前使用 order by。 @Strawberry 我不明白你想说什么我已经提供了带有示例输出的代码我应该为你提供 mysql 表数据,因为我是新来的。 链接问题的接受答案对我来说似乎不言自明:-( @shazyriver 我尝试使用 order by after where 但它在第 1 行显示 ERROR 1111 (HY000): Invalid use of group function 【参考方案1】:

我有这个解决方案。我可以使用复杂的 sql 语句,通过使用下面的 sql 语句将城市的长度与最小长度相等:

SELECT City, LENGTH(City) FROM Station WHERE LENGTH(City) = (SELECT MIN(LENGTH(City)) FROM Station) ORDER BY City LIMIT 1;

【讨论】:

以上是关于有没有办法在mysql的where子句中使用像min这样的sql函数作为值?的主要内容,如果未能解决你的问题,请参考以下文章

Mysql InnoDB 视图变得缓慢并且不使用 Where 子句

JPA:在 where 子句和 Case 语句中一起使用列表 - 有没有办法循环?

MySQL必知必会

需要 Where 子句中的属性 (Redshift)

Mysql在where子句中优化子查询

在查询 where 子句中使用 Grafana 文本框面板变量