2017-10-11 1 views
0

아래 표 1의 데이터를 아래 표 2에 그룹으로 표시하고 싶습니다. 열로 그룹화 할 수는 있지만 예상되는 결과는 소그룹입니다! 지금까지 내가 (assetScore 또는 상태에 의해서만 그룹) SQL 다음 한MySQL : 범위별로 그룹화 한 다음 하위 그룹으로 나누는 방법은 무엇입니까?

Table-1: 

+----+------------+--------+ 
| id | assetScore | status | 
+----+------------+--------+ 
| 1 |   10 |  1 | 
| 2 |   50 |  1 | 
| 3 |   32 |  3 | 
| 4 |   22 |  1 | 
| 5 |   12 |  2 | 
| 6 |   14 |  2 | 
| 7 |   18 |  3 | 
| 8 |   88 |  1 | 
| 9 |   65 |  3 | 
| 10 |   24 |  3 | 
| 11 |   44 |  2 | 
| 12 |   66 |  1 | 
| 13 |   22 |  3 | 
| 14 |   31 |  1 | 
| 15 |  36.5 |  3 | 
| 16 |   77 |  2 | 
+----+------------+--------+ 

Expected Result: 

+--------+---------+-----+--------+ 
|  | Backlog | WIP | Closed | 
+--------+---------+-----+--------+ 
| LOW |  2 | 2 |  3 | 
| MEDIUM |  2 | 1 |  2 | 
| HIGH |  2 | 1 |  1 | 
+--------+---------+-----+--------+ 

Logic: assetScore => >=0 - <=25 -> LOW, > 25 - <= 60 -> MEDIUM' and > 60 -> HIGH status => 1 -> Backlog, 2 -> WIP and 3 -> closed :

SELECT 
    t.RANGE, COUNT(*) 
FROM 
    (SELECT 
     CASE 
       WHEN assetScore BETWEEN 0 AND 25 THEN 'LOW' 
       WHEN assetScore BETWEEN 26 AND 60 THEN 'MEDIUM' 
       ELSE 'HIGH' 
      END AS 'RANGE' 
    FROM device) t 
GROUP BY t.RANGE; 

답변

2

당신은 단순히 상태를 3 케이스를 추가하고 관련 값을 요약 할 수

SELECT 
    t.RANGE, sum(t.Backlog), sum(t.WIP), sum(t.Closed) 
FROM 
    (SELECT 
     CASE 
       WHEN assetScore BETWEEN 0 AND 25 THEN 'LOW' 
       WHEN assetScore BETWEEN 26 AND 60 THEN 'MEDIUM' 
       ELSE 'HIGH' 
      END AS 'RANGE', 
     CASE when status = 1 then 1 else 0 end as Backlog, 
     CASE when status = 2 then 1 else 0 end as WIP, 
     CASE when status = 3 then 1 else 0 end as Closed, 
    FROM device) t 
GROUP BY t.RANGE; 
2

는 범위를 분류하고 그 위에 조건부 집계를 사용하기 case 표현을 사용합니다.

SELECT CASE WHEN assetScore BETWEEN 0 AND 25 THEN 'LOW' 
      WHEN assetScore BETWEEN 26 AND 60 THEN 'MEDIUM' 
      ELSE 'HIGH' 
     END AS `RANGE`, 
SUM(`status`=1) as backlog, 
SUM(`status`=2) as wip, 
SUM(`status`=3) as closed 
FROM device 
GROUP BY CASE WHEN assetScore BETWEEN 0 AND 25 THEN 'LOW' 
       WHEN assetScore BETWEEN 26 AND 60 THEN 'MEDIUM' 
     ELSE 'HIGH' END 
관련 문제