查看: 11797|回复: 27

[精华] 求一分组的sql

[复制链接]
论坛徽章:
0
发表于 2008-5-10 18:44 | 显示全部楼层 |阅读模式
我有这样一个要求:
1、查询的结果按照值排序,如sql:select value from t;
结果示例如下:

50
70
90
130
160
190

2、对数据进行分组。从上述数组第一个值开始,+50之内的值作为同一组值,如果超出50了,则开始一个新的分组。示例如下
50    50
70    50
90    50
130  130
160  130
190  190

3、最终结果是统计每组的个数。结果示例:
50    3
130  2
190  1


这样一个要求,怎么用一个sql语句实现呢。
谢谢大家!

[ 本帖最后由 tsun999 于 2008-5-11 16:53 编辑 ]
论坛徽章:
0
发表于 2008-5-10 18:48 | 显示全部楼层
我是新人,我来学习一下的哈

使用道具 举报

回复
论坛徽章:
4
数据库板块每日发贴之星
日期:2008-05-14 01:01:572010新春纪念徽章
日期:2010-03-01 11:19:50ITPUB 11周年纪念徽章
日期:2012-10-10 13:11:142013年新春福章
日期:2013-02-25 14:51:24
发表于 2008-5-10 20:33 | 显示全部楼层
很好的需求,值得思考!

使用道具 举报

回复
论坛徽章:
69
生肖徽章2007版:羊
日期:2008-11-14 14:42:19复活蛋
日期:2011-08-06 08:59:05ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20版主4段
日期:2012-05-15 15:24:11
发表于 2008-5-10 22:25 | 显示全部楼层
SQL> select sal from emp order by sal;

      SAL
---------
   800.00
   950.00
  1100.00
  1250.00
  1250.00
  1300.00
  1500.00
  1600.00
  2450.00
  2850.00
  2975.00
  3000.00
  3000.00
  5000.00

14 rows selected

SQL>
SQL> select sal, cnt
  2    from (select sal,
  3                 count(0) over(order by sal range between current row and 500 following) cnt,
  4                 row_number() over(order by sal) rn
  5            from emp)
  6   start with rn = 1
  7  connect by rn = prior cnt + prior rn;

      SAL        CNT
--------- ----------
   800.00          6
  1500.00          2
  2450.00          2
  2975.00          3
  5000.00          1

SQL> .....

楼主依样画瓢即可

[ 本帖最后由 nyfor 于 2008-5-10 22:27 编辑 ]

使用道具 举报

回复
论坛徽章:
4
数据库板块每日发贴之星
日期:2008-05-14 01:01:572010新春纪念徽章
日期:2010-03-01 11:19:50ITPUB 11周年纪念徽章
日期:2012-10-10 13:11:142013年新春福章
日期:2013-02-25 14:51:24
发表于 2008-5-10 22:35 | 显示全部楼层
向nyfor 学习,致敬!

SQL> select value from t order by value;

     VALUE
----------
        50
        70
        90
       130
       135
       160
       190

7 rows selected

SQL>
SQL> select value,
  2         cnt
  3  from
  4        (select value,
  5                count(0) over(order by value range between current row and 50 following) cnt,
  6                row_number() over(order by value) rn
  7          from t)
  8  start with rn = 1
  9  connect by rn = prior cnt + prior rn
10  /

     VALUE        CNT
---------- ----------
        50          3
       130          3
       190          1

使用道具 举报

回复
论坛徽章:
44
双鱼座
日期:2016-01-07 20:57:31奔驰
日期:2013-08-02 22:22:552013年新春福章
日期:2013-02-25 14:51:24迷宫蛋
日期:2013-01-29 22:12:11蛋疼蛋
日期:2013-01-07 15:50:53ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28紫蛋头
日期:2011-07-31 11:27:01蜘蛛蛋
日期:2011-06-14 14:20:33蛋疼蛋
日期:2011-06-03 19:39:27SQL大赛参与纪念
日期:2011-04-13 12:08:17
发表于 2008-5-10 22:39 | 显示全部楼层
原帖由 nyfor 于 2008-5-10 22:25 发表
order by sal range between current row and 500 following)

牛人哟

使用道具 举报

回复
论坛徽章:
4
数据库板块每日发贴之星
日期:2008-05-14 01:01:572010新春纪念徽章
日期:2010-03-01 11:19:50ITPUB 11周年纪念徽章
日期:2012-10-10 13:11:142013年新春福章
日期:2013-02-25 14:51:24
发表于 2008-5-10 22:51 | 显示全部楼层

回复 #6 mychary 的帖子

确实牛,语法都知道,可是我想了半天也出不来,nyfor真是牛人啊,传授的经验啊。。

使用道具 举报

回复
论坛徽章:
273
生肖徽章2007版:猪
日期:2008-09-27 09:35:45明尼苏达森林狼
日期:2009-01-12 14:15:09生肖徽章2007版:猪
日期:2009-01-21 16:30:59布鲁克林篮网
日期:2009-03-03 14:42:32圣安东尼奥马刺
日期:2009-03-03 14:44:41生肖徽章2007版:鸡
日期:2009-03-03 21:45:52生肖徽章2007版:牛
日期:2009-03-09 14:03:42生肖徽章2007版:猪
日期:2009-03-10 21:37:00生肖徽章2007版:羊
日期:2009-03-16 10:17:11生肖徽章2007版:虎
日期:2009-03-24 21:26:52
发表于 2008-5-11 10:46 | 显示全部楼层
nyfor 牛人
sql还要好好学习

使用道具 举报

回复
论坛徽章:
0
发表于 2008-5-11 13:18 | 显示全部楼层
nyfor 确实很厉害,学习!!!up!!!

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2008-5-11 16:52 | 显示全部楼层
谢谢各位,学习ing

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表