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

发布于 2022-09-01 12:32:30 字数 564 浏览 13 评论 0

表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。。。咳咳,实在表达不清楚了。。。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

寂寞美少年 2022-09-08 12:32:30

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

她如夕阳 2022-09-08 12:32:30

试试这样呢。

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;
何时共饮酒 2022-09-08 12:32:30

你这个分组的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表里的数据。

梦归所梦 2022-09-08 12:32:30
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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文