MariaDB社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5379|回复: 6
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
发表于 2013-5-7 17:49:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖1 顶 踩
2#
发表于 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;
复制代码
3#
发表于 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);
复制代码
4#
 楼主| 发表于 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
5#
发表于 2013-5-9 17:48:35 | 只看该作者
6#
发表于 2013-5-9 18:04:10 | 只看该作者
加个条件GROUP BY一个kid然后TOP一下个数
7#
发表于 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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|MariaDB社区 ( 京ICP备07012489号    |
业务联系: QQ:48474881; 邮箱: 48474881@qq.com; 电话:13911732319
声明:本站部分文章是网友转载,若未经作者同意或署名有误,请联系网站管理员。

GMT+8, 2024-9-19 10:11 , Processed in 0.088810 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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