请问大家,这条选择语句应该怎样写
现在写到数据库选择,但是好久没用,有点忘了
有一张表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 count(*) desc