mysql执行group的时候如何选择返回指定要求的列?
表A有字段id
、title
,表B有a_id
、name
、price
,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。。。咳咳,实在表达不清楚了。。。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
having
我理解的意思题主的意思时说在
group by
的基础上继续过滤结果, 你需要having
试试这样呢。
你这个分组的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表里的数据。