Mysql 具有与MAX()相同的MIN()组合

Mysql 具有与MAX()相同的MIN()组合,mysql,min,having,ubuntu-13.10,Mysql,Min,Having,Ubuntu 13.10,我一直在寻找这个问题,但在这个问题上找不到任何答案。对于我的Databases类,我们必须演示在我们创建的数据库上使用一些SQL函数。其中一个函数是MIN,而另一个函数是MAX 在我身上发生的事情是,当运行命令时,选择nome作为mais_barato,从equipamento选择MINpreço;名称为葡萄牙语:nome=name,mais_barato=更便宜,equipmento=设备,preço=价格产量如下: +-------------+ | mais_barato | +-----

我一直在寻找这个问题,但在这个问题上找不到任何答案。对于我的Databases类,我们必须演示在我们创建的数据库上使用一些SQL函数。其中一个函数是MIN,而另一个函数是MAX

在我身上发生的事情是,当运行命令时,选择nome作为mais_barato,从equipamento选择MINpreço;名称为葡萄牙语:nome=name,mais_barato=更便宜,equipmento=设备,preço=价格产量如下:

+-------------+
| mais_barato |
+-------------+
| ZON Hub     |
+-------------+
人们会期望原始表格在下面更进一步,让你们自己看看会期望什么:

+-------------+
| mais_barato |
+-------------+
| Modem       |
+-------------+
声明中有什么错误?当运行设备时,选择nome作为设备的mais_caro,并配备MAXpreço;mais_caro=更贵的输出与使用MINpreço的输出相同

原始表Equipmento is cod是与设备相关的唯一代码:

+-----+----------+--------+
| cod | nome     | preço  |
+-----+----------+--------+
| 152 | ZON Hub  |    120 |
| 228 | PowerBox |    100 |
| 444 | Fibra    |    200 |
| 673 | NetGear  |     70 |
| 779 | Modem    |     50 |
+-----+----------+--------+
我使用的是mysql版本14.14发行版5.5.34,用于debian linux gnu i686,在Ubuntu 13.10上使用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在中接受大量垃圾,除非您启用严格模式。

您好,我也是巴西人,只是想让您知道,不要在字段名称上使用特殊字符。preço列应该是preco,我知道特殊字符,我只是用它们做练习,因为老师他不是一个很好的老师。你的问题在逻辑上是不正确的。HAVING条件的表达式不正确:您需要使用逻辑表达式。MySQL误解了bookean的条件。看一看“是的,我现在明白了我做错了什么,我会认真考虑搬到PostgreSQL,因为事实上,在讨论问题的答案中,我只希望使用最大/最小值的行,并且我用子查询来实现它,但是我也尝试使用HAVE子句,因为我在练习中没有在其他任何地方使用过它,我很好奇为什么MySQL返回了与MIN和MAX相同的值,但是通过后来添加的关于PostgreSQL的内容,我相信我理解了为什么,多亏了一个lotIn,在这种情况下,您希望通过……从Equipmento中选择preço=SELECT MAXpreço来分组。在继续之前,请确保了解group by的工作。老实说,在Postgres中运行这些简单的查询:任何时候出现错误或不清楚的地方,Postgres都会抛出错误,而不是盲目地做出错误的假设。我将检查PostgreSQL,并调整我的代码,仅用于此练习。顺便问一下,如何在MySQL中启用严格模式?