select 1,
       ' less than 1 minute' During,
       count(*) as Num,
       count(*) / 45637 * 100 as Percentage
  from al_history
 where clear_during < 60
union
select 2,
       '1-5 minute' During,
       count(*) as Num,
       count(*) / 45637 * 100 as Percentage
  from al_history
 where clear_during >= 60
   and clear_during < 300
union
select 3,
       '5-10 minute' During,
       count(*) as Num,
       count(*) / 45637 * 100 as Percentage
  from al_history
 where clear_during >= 300
   and clear_during < 600
union
select 4,
       'more than 10 minutes' During,
       count(*) as Num,
       count(*) / 45637 * 100 as Percentage
  from al_history
 where clear_during >= 600

解决方案 »

  1.   

    -- TRY IT ...  下次带多点分会更多人帮你:
    SELECT SID,
           DURING,
           COUNT(1) "NUM",
           COUNT(1)/4563700 "PERCENTAGE"
      FROM (      
           SELECT (CASE WHEN CLEAR_DURING < 60
                          THEN 1
                        WHEN CLEAR_DURING >= 60 AND CLEAR_DURING < 300
                          THEN 2
                        WHEN CLEAR_DURING >= 300 AND CLEAR_DURING < 600
                          THEN 3
                        WHEN CLEAR_DURING >= 600
                          THEN 4
                        ELSE 0
                    END) "SID",
                  (CASE WHEN CLEAR_DURING < 60
                          THEN 'LESS THAN 1 MINUTE'
                        WHEN CLEAR_DURING >= 60 AND CLEAR_DURING < 300
                          THEN '1-5 MINUTE'
                        WHEN CLEAR_DURING >= 300 AND CLEAR_DURING < 600
                          THEN '5-10 MINUTE'
                        WHEN CLEAR_DURING >= 600
                          THEN 'MORE THAN 10 MINUTES'
                        ELSE 0
                    END) "DURING"
             FROM AL_HISTORY
            )TT
     GROUP BY SID,DURING;
      

  2.   

    你这么写就行 也可以用case when 
      

  3.   

    已经实现了,用case实现的,呵呵!谢谢啦