表A 
 a_id int pk  name_id int class_id int age_id int  .....数据
  1            1             2           1
  2            1             2           3
  3            2             3           2
  4            3             2           1-----------------------
求 name_id为1的出现的次数 为2出现的次数  为3出现的次数
   class_id 为1的出现的次数 为2出现的次数  为3出现的次数
   age_id 为1的出现的次数 为2出现的次数  为3出现的次数
最节俭的方法.因为我很多这样的字段..但都是123这三个数字...
  

解决方案 »

  1.   

    name_id为1的出现的次数 为2出现的次数  为3出现的次数
    select name_id,count(*) from a group by name_id其它类推。
      

  2.   

    select 'name' as k,name_id,count(*) from a group by name_id
    union all
    select 'class' as k,class_id,count(*) from a group by class_id
    union all
    select 'age' as k,age_id,count(*) from a group by age_id
      

  3.   

    SELECT SUM(IF(name_id=1,1,0)),SUM(IF(name_id=2,1,0)),
    SUM(IF(class_id=1,1,0)),SUM(IF(class_id=2,1,0)),
    SUM(IF(AGE_id=1,1,0)),SUM(IF(AGE_id=2,1,0))...
    FROM TT