夜貓孒 发表于 2013-5-7 17:49:15

这样的sql语句怎么实现 (分组找出组内前3)

http://www.mysqlpub.com/data/attachment/album/201305/07/174649nx8l7jjjzxxc76cz.jpg
用mysql语句实现 右边那样的结果,sql怎么写呢,请各位大侠帮忙

kider 发表于 2013-5-8 11:24:15

你的意思应该是: 要找出前两项分组的情况下的第三项的前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;

kider 发表于 2013-5-8 14:03:21

附表结构及数据: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);

夜貓孒 发表于 2013-5-9 17:08:28

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

kider 发表于 2013-5-9 17:48:35

{:soso_e110:}

小苏 发表于 2013-5-9 18:04:10

加个条件GROUP BY一个kid然后TOP一下个数

wangwl_s 发表于 2013-5-31 13:37:25

我也回复个
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]
查看完整版本: 这样的sql语句怎么实现 (分组找出组内前3)