Mysql查询例子

近两天在看“MYSQL技术内幕”,里面有些不错的例子,我想仅看一下是不够的,动手写一写会加深理解。

1,序号问题

      比如有这样一个表:

+-----+
| a   |
+-----+
|   1 |
|   2 |
|   3 |
| 100 |
| 101 |
| 103 |
| 104 |
| 105 |
+-----+

要求给其添加一个序号列。

SQL语句可以这样写:

mysql> select a,@a:=@a+1 num from nianxu,(select @a:=0) as b;
+-----+-----+
| a   | num |
+-----+-----+
|   1 |   1 |
|   2 |   2 |
|   3 |   3 |
| 100 |   4 |
| 101 |   5 |
| 103 |   6 |
| 104 |   7 |
| 105 |   8 |
+-----+-----+
8 rows in set

还有另一种写法也行:

select a,(select count(*) from nianxu as table1 where table1.a<=table2.a) as num from nianxu as table2;

  

  2,在第1个问题的基础上(表不变)找出连续的范围,像这样:

start        end

1    3

100 101

103 105

也就是找出各个连续段的最小值与最大值

SQL语句可以这样写:

SELECT MIN(a) as start,MAX(a) as end FROM

(SELECT a,num,a-num as diff FROM

(SELECT a,@a:=@a+1 as num FROM nianxu,(SELECT @a:=0) as a)

as b

) as c

GROUP BY diff;


最后结果是:

+-------+-----+
| start | end |
+-------+-----+
|     1 |   3      |
|   100 | 101 |
|   103 | 105 |
+-------+-----+
3 rows in set

上面的SQL语句可以先看里层后看外层。


先写这几个吧,以后再加几个。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值