这样的sql语句怎么实现 (分组找出组内前3)
http://www.mysqlpub.com/data/attachment/album/201305/07/174649nx8l7jjjzxxc76cz.jpg用mysql语句实现 右边那样的结果,sql怎么写呢,请各位大侠帮忙 你的意思应该是: 要找出前两项分组的情况下的第三项的前3 。
一哥们写了个SQL实现的很好:SELECT * FROM
(SELECT @num := (SELECT COUNT(0) FROM test AS b WHERE b.kid = a.kid AND b.mid >= a.mid) AS num,
a.ver,a.kid,a.mid
FROM test AS a) AS c
WHERE c.num <= 3
ORDER BY c.kid DESC, c.mid DESC; 附表结构及数据:CREATE TABLE `test` (
`ver` varchar(10) DEFAULT NULL,
`kid` int(11) DEFAULT NULL,
`mid` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insertinto `test`(`ver`,`kid`,`mid`) values ('0.0.1',203,29),('0.0.1',203,4),('0.0.1',203,38),('0.0.1',203,86),('0.0.1',203,42),('0.0.1',203,546),('0.0.1',203,34),('0.0.1',204,15),('0.0.1',204,20),('0.0.1',204,371),('0.0.1',204,78),('0.0.1',204,57),('0.0.1',204,38),('0.0.1',204,960),(NULL,NULL,0); kider 发表于 2013-5-8 11:24 static/image/common/back.gif
你的意思应该是: 要找出前两项分组的情况下的第三项的前3 。
一哥们写了个SQL实现的很好:
嗯不错不错,能不能分别控制第二列(kid)和第三列(mid)的个数呢?我测试了一下,修改这个数字(c.num <= 4 )可以控制第三列的个数,但是第二列我如果想让它显示三个不同的项,那该怎么办
(例如:
ver kid mid
0.0.1204 960
0.0.1204 371
0.0.1203 546
0.0.1203 86
0.0.1202119
0.0.1202 78
) {:soso_e110:} 加个条件GROUP BY一个kid然后TOP一下个数 我也回复个
SELECT
t.ver,t.kid,t.mid FROM test t
WHERE kid IS NOT NULL AND 3 > (SELECT COUNT(1) FROM test WHERE kid = t.kid AND MID > t.mid)
ORDER BY kid DESC, MID desc
页:
[1]