MySQL社区

标题: 这样的sql语句怎么实现 (分组找出组内前3) [打印本页]

作者: 夜貓孒    时间: 2013-5-7 17:49
标题: 这样的sql语句怎么实现 (分组找出组内前3)

用mysql语句实现 右边那样的结果,sql怎么写呢,请各位大侠帮忙
作者: kider    时间: 2013-5-8 11:24
你的意思应该是: 要找出前两项分组的情况下的第三项的前3 。

一哥们写了个SQL实现的很好:
  1. SELECT * FROM
  2. (SELECT @num := (SELECT COUNT(0) FROM test AS b WHERE b.kid = a.kid AND b.mid >= a.mid) AS num,
  3.         a.ver,a.kid,a.mid
  4.          FROM         test AS a) AS c
  5.   WHERE c.num <= 3
  6. ORDER BY c.kid DESC, c.mid DESC;
复制代码

作者: kider    时间: 2013-5-8 14:03
附表结构及数据:
  1. CREATE TABLE `test` (
  2.   `ver` varchar(10) DEFAULT NULL,
  3.   `kid` int(11) DEFAULT NULL,
  4.   `mid` int(11) DEFAULT NULL
  5. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  6. insert  into `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
kider 发表于 2013-5-8 11:24
你的意思应该是: 要找出前两项分组的情况下的第三项的前3 。

一哥们写了个SQL实现的很好:

嗯不错不错,能不能分别控制第二列(kid)和第三列(mid)的个数呢?我测试了一下,修改这个数字(c.num <= 4 )可以控制第三列的个数,但是第二列我如果想让它显示三个不同的项,那该怎么办
(例如:
ver     kid     mid
0.0.1  204   960
0.0.1  204   371
0.0.1  203   546
0.0.1  203   86
0.0.1  202  119
0.0.1  202   78

作者: kider    时间: 2013-5-9 17:48
{:soso_e110:}
作者: 小苏    时间: 2013-5-9 18:04
加个条件GROUP BY一个kid然后TOP一下个数
作者: wangwl_s    时间: 2013-5-31 13:37
我也回复个
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
作者: 蓝寅舞九天    时间: 2013-7-14 12:15
周末刷论坛玩吧。。
SELECT   a.ver,a.kid,a.mid
FROM  test a inner join
test b on a.ver =b.ver and a.kid=b.kid and a.mid<=b.mid
group by a.ver,a.kid,a.mid
having count(*)<=3
order by a.ver, a.kid desc, a.mid desc
;
作者: rickly0012    时间: 2014-11-17 09:46
还是需要自己动手操作一下,有点关注执行性能了。
作者: beer2008cn    时间: 2014-12-12 10:53
rickly0012 发表于 2014-11-17 09:46
还是需要自己动手操作一下,有点关注执行性能了。

性能很重要啊
作者: guoshixiong    时间: 2015-4-17 14:05
分组 排序 top




欢迎光临 MySQL社区 (http://www.mysqlpub.com/) Powered by Discuz! X3.2