首页 > mysql执行group的时候如何选择返回指定要求的列?

mysql执行group的时候如何选择返回指定要求的列?

表A有字段idtitle,表B有a_idnameprice,A和B的关系为一对多

SQL如下:

select A.title,B.name,min(B.price) from A inner join B ON A.id=B.a_id group by B.a_id order by B.price

需求如下:我要在分组过后的数据里展示表B里价格最低的name(最低的价格已用min(B.price)获得,但B.name没有对应最低价格的那条数据)


非常抱歉,由于原表数据多,所以想精简一下来问,结果写错了,已更正!
有几个朋友没懂我的需求,解释一下:每个A有多个B,我需要查询A里面价格最低的B记录(同时要关联A),我现在的SQL查出来确实是B对应A价格最低的,但是B.name不是价格最低那条数据的name。。。咳咳,实在表达不清楚了。。。


sql
select a.id aid, a.title, tmp_b.id bid, tmp_b.name, tmp_b.price from A a join ( select b.* from B b join (select b.a_id, min(b.price) price from B b group by b.a_id) tb on b.price = tb.price ) tmp_b on tmp_b.a_id = a.id

你这个分组的SQL语句有语法上的错误,虽然这条语句MYSQL不会报错,用GROUP的时候出现在SELECT后的列名必须出现在聚合函数中或者是作为GROUP的条件列才对。

问题描述的不清楚,不知道你到底是要找表里的最小价格还是每个分组里的价格。 如果是要找每个name的最小price那么:
SELECT B.name,min(B.price) AS min_price FROM B GROUP BY B.name ORDER BY min_price AS
以B.name分组,找到每个组里的最低价格。 然后再用B.name获取需要的A表里的数据。


having
我理解的意思题主的意思时说在 group by 的基础上继续过滤结果, 你需要 having


试试这样呢。

select a.title, t.name, t.price from a 
inner join (select * from b order by id, price ) t on t.id = a.b_id 
group by a.b_id;
【热门文章】
【热门文章】