我已经搜索过此内容,但找不到关于此特定问题的任何答案。对于我的Databases类,我们必须演示在已创建的数据库上使用某些SQL函数的情况。这些函数之一是MIN(),而另一个是MAX()等。

我正在发生的事情是,当运行命令SELECT nome AS mais_barato FROM equipamento HAVING MIN(preço);(名称使用葡萄牙语:nome = name,mais_barato = cheaper,equipapmento = equipment,preço= price)时,输出如下:

+-------------+
| mais_barato |
+-------------+
| ZON Hub     |
+-------------+


人们会期望的地方(原始表在下面,您可以自己看到期望的结果):

+-------------+
| mais_barato |
+-------------+
| Modem       |
+-------------+


陈述中有什么问题?运行SELECT nome AS mais_caro FROM equipamento HAVING MAX(preço);(mais_caro = more_expensive)时,输出与使用MIN(preço)的输出相同。

原始表equipamento是(cod是与设备关联的唯一代码):

+-----+----------+--------+
| cod | nome     | preço  |
+-----+----------+--------+
| 152 | ZON Hub  |    120 |
| 228 | PowerBox |    100 |
| 444 | Fibra    |    200 |
| 673 | NetGear  |     70 |
| 779 | Modem    |     50 |
+-----+----------+--------+


我在Ubuntu 13.10上使用mysql Ver 14.14 Distrib 5.5.34, for debian-linux-gnu (i686) using readline 6.2

非常感谢你

最佳答案

只是一个疯狂的猜测:MySQL在这里错误地将MIN()和MAX()解释为布尔值。

您的问题尚不完全清楚,但是我猜您只是想要一个order by子句:

SELECT nome AS mais_caro
FROM equipamento
ORDER BY preço DESC limit 1


如果不是,请查看子查询,例如:

SELECT nome AS mais_caro
FROM equipamento
WHERE preço = (SELECT MAX(preço) FROM equipamento);




顺便说一句,要学习SQL,您真的应该研究PostgreSQL。当遇到诸如您所犯的错误之类的错误时,该手册非常出色,并且极其严格,无情且内容丰富。

denis=# create table test (id serial);
CREATE TABLE
denis=# select id from test having min(id);
ERROR:  argument of HAVING must be type boolean, not type integer
LINE 1: select id from test having min(id);
                                   ^


相反,正如您已经发现的那样,除非您启用严格模式,否则MySQL会接受大量垃圾。

关于mysql - HAVING MIN()组合返回与HAVING MAX()相同的组合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20094050/

10-12 07:35