HAVING MIN()组合返回与HAVING MAX()相同

时间:2013-11-20 10:59:01

标签: mysql min having ubuntu-13.10

我已经搜索了这个,但在这件事上找不到任何答案。对于我的Databases类,我们必须演示在我们创建的数据库上使用某些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 |
+-----+----------+--------+

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

非常感谢

1 个答案:

答案 0 :(得分: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已经发现,除非您启用严格模式,否则会接受大量垃圾。