mysql 分组查询前几名_【MYSQL分组查询前1或者前几名排名】

测试库表:

CREATE TABLE test(NAME VARCHAR(10),val INT,memo VARCHAR(20));

INSERT INTO test VALUES('a', 2, 'a2--a的第二个值') ;

INSERT INTO test VALUES('a', 1, 'a1--a的第一个值') ;

INSERT INTO test VALUES('a', 3, 'a3--a的第三个值') ;

INSERT INTO test VALUES('b', 1, 'b1--b的第一个值') ;

INSERT INTO test VALUES('b', 3, 'b3--b的第三个值') ;

INSERT INTO test VALUES('b', 2, 'b2--b的第二个值') ;

INSERT INTO test VALUES('b', 4, 'b2--b的第四个值') ;

INSERT INTO test VALUES('b', 5, 'b2--b的第五个值') ;

go

查询:

--方法1:

SELECT

a.*

FROM

test a

WHERE val =

(SELECT

MAX(val)

FROM

test

WHERE NAME = a.name)

ORDER BY a.name;

--方法2:

SELECT

a.*

FROM

test a

WHERE NOT EXISTS

(SELECT

1

FROM

test

WHERE NAME = a.name

AND val > a.val);

--方法3:

SELECT

a.*

FROM

test a,

(SELECT

NAME,

MAX(val) val

FROM

test

GROUP BY NAME) b

WHERE a.name = b.name

AND a.val = b.val

ORDER BY a.name ;

--方法4:

SELECT

a.*

FROM

test a

INNER JOIN

(SELECT

NAME,

MAX(val) val

FROM

test

GROUP BY NAME) b

ON a.name = b.name

AND a.val = b.val

ORDER BY a.name ;

--方法5

SELECT

a.*

FROM

test a

WHERE 1 >

(SELECT

COUNT(*)

FROM

test

WHERE NAME = a.name

AND val > a.val)

ORDER BY a.name;

/*

"name""val""memo"

"a""3""a3--a的第三个值"

"b""5""b2--b的第五个值"

*/

仅供参考

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值