日期:2014-05-17  浏览次数:20485 次

请问大家,这条选择语句应该怎样写
现在写到数据库选择,但是好久没用,有点忘了
有一张表table1,有一列叫name,比如表有100行,而每一行的这一列以不同字母开头,现在要进行统计出不同字母开头的top 5。
比如有这样的表:
id    name     
1     pa2323   
2     wa1232
3     ya9823
4     mn2342
5     pa1232
6     ui1232
.     ......
.     ......
我想要的就是pa开头的有几条,wa开头的有几条,ya开头的有几条。想到一个笨办法,先用一个语句substr()得到name列开头两个字母总共有多少种,然后对每一种写select count,还有更好的办法吗  

------解决方案--------------------
select top 5 left(name,2),count(left(name,2))
from table1
group by left(name,2)
order by count(left(name,2)) desc
------解决方案--------------------
----------------------------------------------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2014-01-02 13:26:31
-- Version:
--      Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) 
-- Dec 28 2012 20:23:12 
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
--
----------------------------------------------------------------
--> 测试数据:[table1]
if object_id('[table1]') is not null drop table [table1]
go 
create table [table1]([id] int,[name] varchar(6))
insert [table1]
select 1,'pa2323' union all
select 2,'wa1232' union all
select 3,'ya9823' union all
select 4,'mn2342' union all
select 5,'pa1232' union all
select 6,'ui1232'
--------------开始查询--------------------------
select top 5 left(name,2) '以字母开头',count(left(name,2)) '数量'
from table1
group by left(name,2)
order by count(left(name,2)) desc
----------------结果----------------------------
/* 
以字母开头 数量
----- -----------
pa    2
ya    1
wa    1
ui    1
mn    1
*/

------解决方案--------------------
select top 5
       substring(name,1,2) as name,
       COUNT(*) cc
from table1
group by substring(name,1,2)
order by&