Mysql min函数返回错误的结果

时间:2015-04-26 20:41:02

标签: mysql sql

我有Book_Details表

CREATE TABLE `Book_Details` (
  `bookId` int(11) NOT NULL,
  `book_name` varchar(45) DEFAULT NULL,
  `book_desc` varchar(45) DEFAULT NULL,
  `price` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

此表包含三行

insert into book_details values (1,'Java for beginners','Java Book for beginners',99);
insert into book_details values (2,'Learn Advanced java','Advanced Java Book',223);
insert into book_details values (3,'Learn Practical java','Practical Java Book',78);

我正在执行以下查询

select min(price) min_price,book_name from book_details;

我期待以下结果

min_price | book_name
-----------------------
78        | Learn Practical java

但令人惊讶的是我的输出低于输出

min_price | book_name
-----------------------
78        | Java for beginners

有人可以解释一下为什么我得到这个输出?哪里错了? 我的MYsql DB版本是5.5.38。请帮忙。

2 个答案:

答案 0 :(得分:3)

您可以获得其他列的最低价格和任意值。您正在使用MySQL扩展,您应该只是停止使用 - 始终确保select中不是聚合函数参数的所有列都在group by

请改为尝试:

select bd.*
from book_details
order by price
limit 1;

答案 1 :(得分:0)

这个SELECT语句不是正确的SQL,但MySQL接受它。查询始终返回单行,但是几本书可能具有相同的价格,并且查询可以返回任何book_name值。您应该使用SELECT为所有具有最低价格

的书籍返回多行
select price,book_name from book_details where price = (select min(price) from book_details)