0

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

发生在我身上的是,运行命令时SELECT nome AS mais_barato FROM equipamento HAVING MIN(preço);(名称为葡萄牙语:nome=name,mais_barato=cheaper,equipamento=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 |
+-----+----------+--------+

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

非常感谢

4

1 回答 1

1

只是一个疯狂的猜测: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 会接受大量垃圾。

于 2013-11-20T11:07:09.860 回答