SQL のメモ

検索 CASE 式でしか NULL の判定はできない

  • 検索 CASE 式: NULL 判定できる

    CASE
      WHEN d.name IS NULL THEN
        CASE d.type
          WHEN 'husky' THEN 'risa'
          WHEN 'shiba' THEN 'natsu'
          WHEN 'border collie' THEN 'chon'
          WHEN 'labrador retriever' THEN 'robo'
          ELSE NULL
        END
      ELSE d.name
    END AS name
    
  • 簡易 CASE 式: NULL 判定できない

    CASE d.name
      WHEN NULL THEN
        CASE d.type
          WHEN 'husky' THEN 'risa'
          WHEN 'shiba' THEN 'natsu'
          WHEN 'border collie' THEN 'chon'
          WHEN 'labrador retriever' THEN 'robo'
          ELSE NULL
        END
      ELSE d.name
    END AS name
    
    • d.name が NULL の場合は、 FALSE と評価されてしまう ( ELSE 句に入ってしまう)

    • 使いようによっては、FALSE と評価されてしまうことを逆に利用できるかも....

COUNT(DISTINCT CASE WHEN ...)

こういう書き方ができる

COUNT(
  DISTINCT CASE
    WHEN l.type = 2 THEN l.user_id
    ELSE NULL
  END
) as num_unique_users,

SELECT文の評価順序