我有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。请帮忙。
答案 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)