>

SQL 쿼리가 있고 값이 low, medium, high 또는 unspecified로 설정된 총 우선 순위 수를 계산할 수 있습니다.

현재 최대 13 행으로 계산됩니다. 2, 4, 0과 같은 개수의 열이 여러 개있을 것으로 예상됩니다

코드 :

SELECT c.Name, COUNT(*) as Count_By_Priority, 
 CASE WHEN cb.Priority = 0 THEN "Unspecified" WHEN cb.Priority = 1 THEN "Low" WHEN cb.Priority = 2 THEN "Medium" WHEN cb.Priority = 3 THEN "High" END as PriorityNumber 
 FROM TABLE 1 cb 
 LEFT JOIN Co c ON c.Id = cb.Id 
 WHERE c.Name LIKE %Name%" 
 GROUP BY c.Id;

낮거나 대안이 필요한 경우 우선 순위 키에 대해 "지정되지 않음"을 인쇄하는 것 같습니다.

  • 답변 # 1

    c.Id 를 기준으로 그룹 별 절을 그룹으로 변경할 수 있다고 확신합니다. 그런 다음 PriorityNumber :

    SELECT 
        c.Name,
        COUNT(*) as Count_By_Priority,
        CASE 
            WHEN cb.Priority = 0 THEN "Unspecified"
            WHEN cb.Priority = 1 THEN "Low"
            WHEN cb.Priority = 2 THEN "Medium"
            WHEN cb.Priority = 3 THEN "High" 
        END as PriorityNumber
    FROM TABLE 1 cb 
    LEFT JOIN Co c 
    ON c.Id = cb.Id
    WHERE c.Name LIKE %Name%"
    GROUP BY c.Id, PriorityNumber;
    
    

  • 답변 # 2

    이것을 시도하십시오

    SELECT c.Name, COUNT(*) as Count_By_Priority,
    CASE WHEN cb.Priority = 0 THEN "Unspecified" 
    WHEN cb.Priority = 1 THEN "Low" 
    WHEN cb.Priority = 2 THEN "Medium" 
    WHEN cb.Priority = 3 THEN "High" END as PriorityNumber 
    FROM TABLE 1 cb LEFT JOIN Co c ON c.Id = cb.Id 
    WHERE c.Name LIKE %Name%" 
    GROUP BY c.Name,PriorityNumber ;
    
    

  • 답변 # 3

    집계를 사용하고 있지만 SELECT  당신의 GROUP BY 와 일치하지 않습니다 . 다음과 같은 의도가 있다고 생각합니다.

    SELECT c.Name, COUNT(*) as Count_By_Priority, 
           (CASE WHEN MAX(cb.Priority) = 0 THEN 'Unspecified'
                 WHEN MAX(cb.Priority) = 1 THEN 'Low'
                 WHEN MAX(cb.Priority) = 2 THEN 'Medium'
                 WHEN MAX(cb.Priority) = 3 THEN 'High'
            END) as PriorityNumber 
    FROM TABLE 1 cb LEFT JOIN
         Co c
         ON c.Id = cb.Id 
    WHERE c.Name LIKE '%Name%'
    GROUP BY c.Id;
    
    

    MAX() 를 원하는지 잘 모르겠습니다  또는 MIN()  그러나 MAX()  나에게 의미가 있습니다.

  • 답변 # 4

    별도의 열에서 각 우선 순위를 계산하려면 조건부 집계를 사용하십시오.

    SELECT c.Name, 
     sum(CASE WHEN cb.Priority = 0 THEN 1 else 0 end) as "Unspecified" 
     sum(case WHEN cb.Priority = 1 THEN 1 else 0 end) as "Low" 
     sum(case WHEN cb.Priority = 2 THEN 1 else 0 end) as "Medium" 
     sum(case WHEN cb.Priority = 3 THEN 1 else 0 end) as "High"  
     FROM TABLE 1 cb 
     LEFT JOIN Co c ON c.Id = cb.Id 
     WHERE c.Name LIKE %Name%" 
     GROUP BY c.name;
    
    

  • 이전 java - 왜 널 캐스트를 매개 변수로 사용합니까?
  • 다음 MySQL UNION은 일관되게 작동하지 않습니다 두 절의 posision을 바꾸면 결과가 서로 다릅니다