SQL中級CASE文


CASE

  • を使用して構文の
  • をクエリーし、if文などの条件文を使用する必要がある場合は
  • 条件はTrue->読み取り停止、False->Elseセクション、Else部分なし、False->NULL
  • を返す
  • WHEN-THENは常に組み合わせて使用され、複数の
  • が使用可能である
    CASE 
     WHEN 조건1 THEN 결과값1 
     WHEN 조건2 THEN 결과값2 
     WHEN 조건N THEN 결과값N 
     ELSE 결과값 
     END

    例1:

    SELECT CASE
    	WHEN categoryid =1 AND SupplierID = 1 THEN '음료'
        WHEN categoryid =2 THEN '조미료'
        ELSE '기타'
        END AS 'categoryName', *
    FROM Products
    結果:

    Pivoting:


    例2:


    カテゴリ1,2,3回の平均価格を見たいだけです.
    SELECT AVG(CASE WHEN categoryid =1 THEN price ELSE NULL END) AS category1_price, 
    	AVG(CASE WHEN categoryid =2 THEN price ELSE NULL END) AS category2_price, 
           AVG(CASE WHEN categoryid =3 THEN price ELSE NULL END) AS category3_price
    FROM Products
  • 結果:
  • ハッカーランキング問題:Triangleタイプ

  • https://www.hackerrank.com/challenges/what-type-of-triangle/problem
  • は、次の点を考慮する必要があります.
    -三角形の条件:2つのエッジの長さの和>別のエッジの長さ
    -正三角形条件:3辺がそれぞれA、B、Cの場合、A=BおよびD B=C.
    -等辺三角形条件:A=BまたはB=CまたはA=C
  • SELECT CASE WHEN A=B AND B=C THEN 'Equilateral'
                WHEN A+B<=C OR A+C<=B OR B+C<=A THEN 'Not A Triangle'
                WHEN A=B OR B=C OR A=C THEN 'Isosceles'
                ELSE 'Scalene'
           END
    FROM triangles
    結果:

    Letcode問題:1179。Reformat Department Table


  • https://leetcode.com/problems/reformat-department-table/


  • 考慮すべき事項:
    -select文(表示印刷)id、Jan Revenue、...、Dec Revenueに入ります.
    -ここで、Jan RevenueはAS関数でランダムに作成されたようです.
    -CASE文:when=「毎月」THEN収入.
    -SUMを使用:1番部門(id)の毎月の収益を表示したいので、case文をSUMにバインドします.
    -GROUP BY:各部署にあるのでGROUP BY IDを書きます.
  • SELECT id,
        SUM(CASE WHEN month='Jan' THEN revenue ELSE NULL END) AS Jan_Revenue,
        SUM(CASE WHEN month='Feb' THEN revenue ELSE NULL END) AS Feb_Revenue,
        SUM(CASE WHEN month='Mar' THEN revenue ELSE NULL END) AS Mar_Revenue,
        SUM(CASE WHEN month='Apr' THEN revenue ELSE NULL END) AS Apr_Revenue,
        SUM(CASE WHEN month='May' THEN revenue ELSE NULL END) AS May_Revenue,
        SUM(CASE WHEN month='Jun' THEN revenue ELSE NULL END) AS Jun_Revenue,
        SUM(CASE WHEN month='Jul' THEN revenue ELSE NULL END) AS Jul_Revenue,
        SUM(CASE WHEN month='Aug' THEN revenue ELSE NULL END) AS Aug_Revenue,
        SUM(CASE WHEN month='Sep' THEN revenue ELSE NULL END) AS Sep_Revenue,
        SUM(CASE WHEN month='Oct' THEN revenue ELSE NULL END) AS Oct_Revenue,
        SUM(CASE WHEN month='Nov' THEN revenue ELSE NULL END) AS Nov_Revenue,
        SUM(CASE WHEN month='Dec' THEN revenue ELSE NULL END) AS Dec_Revenue
    FROM department
    GROUP BY id