分组求极值

分组按指定字段排序求极值

数据截图

数据

需求

按p_id分组后,获取min(p_order)对应行a的值,max(p_order)对应行b的最大值

sql

第一种方式:

SELECT p_id,b,a
from
(
SELECT temp3.*, temp4.b FROM
(
SELECT test_xw.p_id, a FROM test_xw
inner join
(SELECT min(id) as id from test_xw GROUP BY p_id ORDER BY p_order) temp1
on test_xw.id = temp1.id
) temp3
inner join 
(
SELECT test_xw.p_id, b FROM test_xw
inner join
(SELECT max(id) as id from test_xw GROUP BY p_id ORDER BY p_order) temp2
on test_xw.id = temp2.id
)temp4
on temp3.p_id = temp4.p_id
) temp

第二种方式:

SELECT
 p_id,
 SUBSTRING_INDEX(temp.str, ',' ,- 1) , SUBSTRING_INDEX(temp.str, ',', 1)
FROM
 (
  SELECT
   p_id,
   GROUP_CONCAT(
    CONCAT(a, ',', b)
    ORDER BY
     p_order,
     ','
   ) str
  FROM
   test_xw
  GROUP BY
   p_id
 ) temp;

备注:sql不是太熟练,如果能给出更好的解决办法欢迎留言

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值