有的时候可能会用到select作为子句的情况,也就是说select语句查询到的东西作为结果给另一个select语句查询,举个简单的例子,假如我有这么一张表:

ticket

game

bets

is_quidpick

LG21020801

1

0

LG21020801

2

1

LG21020801

1

2

LG21020801

3

0

LG21020801

1

1

LG21020802

2

0

LG21020802

1

1

LG21020802

3

2

LG21020802

4

0

LG21020802

2

1

    如果我想统计一下每个游戏中每种状态(is_quidpick:0,1,2)买的票的注数以及该种游戏总的注数,每个游戏总的注数直接用sum(bets)..group by game就可以得到,同样的,每个状态的总注数可以用sum(bets) ..group by is_quidpick, game得到。这里明显有两种求和方式,如果用一条select语句肯定是无法同时得到2个求和结果了,因此,这时就要用到select子句。输入:

select tt.game_name,
       tt.is_quidpick,
       sum(tt.bets) bets,
       nt.total_bets
  from (select t.game_name, sum(bets) total_bets
          from ticket t
         group by t.game_name) nt,
       ticket tt
 where nt.game_name = tt.game_name
 group by tt.is_quidpick, tt.game_name, nt.total_bets
 order by tt.game_name, tt.is_quidpick;

得到:

game

is_quidpick

bets

total_bets

LG21020801

0

4

8

LG21020801

1

3

8

LG21020801

2

1

8

LG21020802

0

6

12

LG21020802

1

3

12

LG21020802

2

3

12

这里不仅仅是用了select子句,同时还使用了自连接,即同一张表内的连接,不管是自连接也好,还是多张表连接也好,都不影响select子句的使用,这里着重select子句的使用,对于连接就不多说了,有兴趣可看上篇文章‘SQL连接—笛卡尔积’。

    select子句其实跟一般的select语句没什么不同,在使用的过程中只要把select得到的结果当作一张新表来使用即可,相当于多一张表而已。