表结构:cat_id,  name,  num1,  num2,  num3
1        张一    2      0    100
2        王二    3      1     33
3        李四    1     33     21
1        钱三   11      8   1122
2        麻大  100     22      0
...
现在根据cat_id分组,要求结果如下:cat_id, num1大于10的用户总数, num2大于30的用户总数, num3大于100的用户总数    查询语句大至结构:select cat_id,(条件一),(条件二),(条件三) from myTable group by cat_id注意是在分组的基础上进行统计,知道一个条件可以用having,但多个条件怎么写呢?还请指点,不甚感激。

解决方案 »

  1.   

    select a.cat_id,(select count(*) from table where num1>10 and cat_id=a.cat_id),.....(select distinct cat_id from table)a
      

  2.   

    /*
    1        张一    2      0    100
    2        王二    3      1     33
    3        李四    1     33     21
    1        钱三   11      8   1122
    2        麻大  100     22      0现在根据cat_id分组,要求结果如下:
    cat_id, num1大于10的用户总数, num2大于30的用户总数, num3大于100的用户总数  
    */drop table #test
    create table #test(cat_id int,  name nvarchar(50),  num1 int,  num2 int,  num3 int)
    insert into #test (cat_id,  name,  num1,  num2,  num3) values(1,'张一', 2, 0, 100)
    insert into #test (cat_id,  name,  num1,  num2,  num3) values(2,'王二', 3, 1, 33)
    insert into #test (cat_id,  name,  num1,  num2,  num3) values(3,'李四', 1, 33, 21)
    insert into #test (cat_id,  name,  num1,  num2,  num3) values(1,'钱三', 11, 8, 1122)
    insert into #test (cat_id,  name,  num1,  num2,  num3) values(2,'麻大', 100, 22, 0)select a.cat_id, b.num1, c.num2, d.num3 
    from  (select cat_id from #test group by cat_id) a, (select count(*) as num1 from #test where num1 > 10) b, 
    (select count(*) as num2 from #test where num2>30) c, (select count(*) as num3 from #test where num3>100) d
      

  3.   

    以下语句未测试:Select cat1.cat_id, cat1.num1Count, cat2.num2Count, cat3.num3Count
    From
    (Select cat_id, Count(*) as num1Count From Table1 Where num1>10 Group by cat_id) as cat1,
    (Select cat_id, Count(*) as num2Count From Table1 Where num2>30 Group by cat_id) as cat2,
    (Select cat_id, Count(*) as num3Count From Table1 Where num3>100 Group by cat_id) as cat3
    Where cat1.cat_id=cat2.cat_id and cat1.cat_id=cat3.cat_id
      

  4.   

    我也写一个玩玩
    create table #Test1
    (cat_id int,
    name varchar(10),
    num1 int,
    num2 int,
    num3 int)insert #Test1 values(1,'张一',2,0,100)
    insert #Test1 values(2,'王二',3,1,33)
    insert #Test1 values(3,'李四',1,33,21)
    insert #Test1 values(1,'钱三',11,8,1122)
    insert #Test1 values(2,'麻大',100,22,0)select a.cat_id,num1大于10的用户总数,num2大于30的用户总数,num3大于100的用户总数 from 
    (select cat_id from Test1 group by cat_id) a left join 
    (select cat_id,count(cat_id)'num1大于10的用户总数' from Test1where num1 > 10 group by cat_id) b
    on a.cat_id = b.cat_id left join 
    (select cat_id,count(cat_id)'num2大于30的用户总数' from Test1where num2 > 30 group by cat_id) c
    on a.cat_id = c.cat_id left join
    (select cat_id,count(cat_id)'num3大于100的用户总数' from Test1 where num3 > 100 group by cat_id) d
    on a.cat_id = d.cat_iddrop table #Test1
      

  5.   

    create table #Test1
    (cat_id int,
    name varchar(10),
    num1 int,
    num2 int,
    num3 int)insert #Test1 values(1,'张一',12,0,100)
    insert #Test1 values(2,'王二',3,1,33)
    insert #Test1 values(3,'李四',1,33,21)
    insert #Test1 values(1,'钱三',11,8,1122)
    insert #Test1 values(2,'麻大',100,22,0)select distinct a.cat_id,b.num1大于10的用户总数,c.num2大于30的用户总数,d.num3大于100的用户总数
    from #Test1 as a
    left join
    (select cat_id,count(num1) as num1大于10的用户总数
    from #Test1
    where num1>10 
    group by cat_id) as b
    on a.cat_id = b.cat_id
    left join
    (select cat_id,count(num1) as num2大于30的用户总数
    from #Test1
    where num2>30 
    group by cat_id) as c
    on a.cat_id = c.cat_id
    left join
    (select cat_id,count(num1) as num3大于100的用户总数
    from #Test1
    where num3>100 
    group by cat_id) as d
    on a.cat_id = d.cat_iddrop table #Test1