TABEL:name      金额      
张三      5.00
李四      10.00
王麻子    20.05
张三      8.75
张三      9.90
李四      12.00用group by name 分组后
当然是
name
张三
李四
王麻子但我要得出的是分组后的count,即count=3
请问大家这句SQL语句怎么写?

解决方案 »

  1.   

    declare @t table(name varchar(10),金额 dec(10,2))
    insert into @t select '张三'      ,5.00
    union all select '李四'      ,10.00
    union all select '王麻子'    ,20.05
    union all select '张三'      ,8.75
    union all select '张三'      ,9.90
    union all select '李四'      ,12.00select count(*) from (select name from @t group by name)a
      

  2.   

    select name ,count(name)from 表名 group by name
      

  3.   

    select name ,count(*) from 表 group by name
      

  4.   

    先谢谢大家耐心解答了,但HaN的方法ODBC通不过,
    而roy_88和yaoyaomaomao(广州考拉) 中的count无疑还是=6
    是不是我的表达不够清楚,我希望这个时候的结果是count=3(即不论发生多少笔业务,但我要统计的是多少个人参与了消费,再返回人名)
      

  5.   

    在MSSQL的查询分析器里能通过并返回正确答案,
    但我在软件里应该怎么写呢?我现在正用的不是MSSQL而是mysql,mysql似乎不支持这种写法,我还能怎么写呢?他们后面两者的写法可以怎么改能达到我的目的呢?就是说我既要返回记录总数又要返回每个人名,
    先谢谢HaN的耐心指导了。
      

  6.   

    mysql还真没用过。按说应该支持这样的写法的。试试吧select count(*) from (select name from 表 group by name)aselect count(*) from (select name from 表 group by name)--
      

  7.   

    对不起,刚才是我的错,复合查询在这里运行是可以的,是我打错了一个字母所以报错,现在已返回记录数的正确答案,但是能否同时返回name呢?
    还请HaN指教。
    另在mysql中
    select count(*) from (select name from 表 group by name)a 可行select count(*) from (select name from 表 group by name) 报错
      

  8.   

    select count(*) from (select name from 表 group by name)a 可行select count(*) from (select name from 表 group by name) B --要加别名,不加,肯定会报错~
      

  9.   

    select count(*) from (select name from 表 group by name) 报错
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    原因是你的from后面的这个子查询是必要要有一个别名的,这是一个规范
    SQLServer也是有这个规范的
    而Oracle没有,你可以写也可以不写,但是如果需要子查询的某些字段就必须写
    反正,写了是符合规范的就是了,hoho
    另外,lz希望如何返回name呢?
      

  10.   

    lz是要这个效果吗?
    SELECT Name, COUNT(*) FROM 表 GROUP BY Name
      

  11.   

    另外,你这样写还有有点多余~select count(distinct name) from 表 这样一样可以达到你的目的~
      

  12.   

    我还以为mysql和access的一样呢。select count(*) from (select name from 表 group by name) -access不写没问题
      

  13.   

    还是要这样的效果?SELECT DISTINCT Name FROM 表
    UNION
    SELECT COUNT(DISTINCT Name) FROM 表
      

  14.   


    declare @t table(name varchar(10),金额 dec(10,2))
    insert into @t select '张三'      ,5.00
    union all select '李四'      ,10.00
    union all select '王麻子'    ,20.05
    union all select '张三'      ,8.75
    union all select '张三'      ,9.90
    union all select '李四'      ,12.00select count(*),name from (select name from @t group by name)a group by nameselect count(distinct name),name from @t group by name--itblog得好啊。学习
      

  15.   

    Reeezak(坚持信念) ( ) 信誉:100  2006-05-28 17:03:00  得分: 0  
     
     
       lz是要这个效果吗?
    SELECT Name, COUNT(*) FROM 表 GROUP BY Name
      
     
    嘿嘿,我倒是想要记录数+name,但似乎好象一条语句返回不出这个结果来,我现在倒是按照HaN的指导写出结果来了,只是把记录总数和返回name分成了两段查询,看着代码多了总是不爽,有同时返回的办法吗?再次谢谢大家热心关注!为感谢大家的热心,分数增加50分。
      

  16.   

    呵呵,马上结贴,本来还想看看有什么可以同时返回记录总数和name的写法的,刚才自己写了又写,想了想没戏,还是必须分成两段。
    itblog(^ω^) 兄台的方法确实不错,详细指导更不错!谢谢兄台了!
      

  17.   

    兄弟要这个吗?select name,[count]=(select count(name) from 表 where name=a.name)
    from 表 a
    group by name
      

  18.   

    或是这个~select name,[count]=(select count(distinct name) from 表 )
    from 表 a
    group by name
      

  19.   

    select  name,[count]=(select  count(name)  from  表  where  name=a.name)  
    from  表  a  
    group  by  name 这个好象也不能在一个查询表内返回表总记录数和分别的name吧不过问题已经解决了,非常感谢各位!但新的问题出来了我晕~贴子回复总数大于给分次数什么意思,那要怎么给分?好久不来,难道连给分都不会了!!!!!!?????????!·#¥!·#%¥·#¥%#¥%#¥%……#
      

  20.   

    是要這樣的結果嗎
    Select name,count(name) as colname from tablename 
    group by name having count(name)=3
      

  21.   

    select count(*) from (select distinct name from 表名 )
      

  22.   

    select count(distinct name) from ** group by name