我已经搜索过此内容,但找不到关于此特定问题的任何答案。对于我的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/