MySQL社区

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 7404|回复: 10

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

[复制链接]
发表于 2013-5-7 17:49:15 | 显示全部楼层 |阅读模式

用mysql语句实现 右边那样的结果,sql怎么写呢,请各位大侠帮忙

本帖被以下淘专辑推荐:

发表于 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
发表于 2013-5-8 11:24:15 | 显示全部楼层
你的意思应该是: 要找出前两项分组的情况下的第三项的前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;
复制代码
发表于 2013-5-8 14:03:21 | 显示全部楼层
附表结构及数据:
  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:28 | 显示全部楼层
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
发表于 2013-5-9 17:48:35 | 显示全部楼层
{:soso_e110:}
发表于 2013-5-9 18:04:10 | 显示全部楼层
加个条件GROUP BY一个kid然后TOP一下个数
发表于 2013-7-14 12:15:23 | 显示全部楼层
周末刷论坛玩吧。。
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
;
发表于 2014-11-17 09:46:09 | 显示全部楼层
还是需要自己动手操作一下,有点关注执行性能了。
发表于 2014-12-12 10:53:23 | 显示全部楼层
rickly0012 发表于 2014-11-17 09:46
还是需要自己动手操作一下,有点关注执行性能了。

性能很重要啊
发表于 2015-4-17 14:05:39 | 显示全部楼层
分组 排序 top
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|申请友链|小黑屋|Archiver|手机版|MySQL社区 ( 京ICP备07012489号   
联系人:周生; 联系电话:13911732319

GMT+8, 2024-4-22 09:39 , Processed in 0.071832 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表