作者icydream (巧虎)
看板Database
标题Re: [SQL ] SQL(MySQL)中 实现自动分组编号
时间Fri Feb 27 09:55:52 2015
※ 引述《JeremyJoung (J.J.)》之铭言:
: 这是工作中遇到的问题
: 我需要一个分组的自动流水编号
: 每个GROUP都需要从1开始自动编号
: 由於 INSERT UPDATE过程中 无法参考自我查询
: 所以无法巢状自己查自己
: 如果说 另外开一个COUNT表或VIEW
: 在批次INSERT 或UPDATE时
: COUNT表不会自动更新 必须一笔一笔处理 这样很没效率
: 请问有没有什麽方法可以实现 纯粹SQL指令的分组自动编号
: 我目前惯用环境是MySQL 但是希望其他SQL也可以适用
: 所以Oracle sequence 暂时先跳过
使用以下例子来说明,
假设有一资料表employee,
栏位有department(部门)、name(姓名)、age(年龄),
纪录资料如下:
department name age
---------- ---------- ----------
IT Hank 50
IT Cris 30
IT John 45
HR Tina 22
HR Alex 25
HR Tom 48
IT James 33
Market Joana 27
Market Jane 25
Market Joe 36
今天的需求为,依照各部门人员的年龄来做分组编号,年龄越大者编号越小,
若有同年龄者,则以姓名的自然排序来决定编号。
结果为:
department name age idx
---------- ---------- ---------- ----------
HR Jack 48 1
HR Tom 48 2
HR Alex 25 3
HR Tina 22 4
IT Hank 50 1
IT John 45 2
IT James 33 3
IT Cris 30 4
Market Joe 36 1
Market Joana 27 2
Market Jane 25 3
SQL:
select t2.*,(select count(*) from employee as t1 where (t1.age > t2.age or
t1.age = t2.age and t1.name <= t2.name) and t1.department = t2.department
group by t1.department) as idx from employee as t2 order by 1,4;
我是使用SQLite来做示范,没使用到特殊的function,所以应该可适用其他的资料库。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 115.43.68.94
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Database/M.1425002156.A.BA7.html