Open1

【LeetCode】SQL I Day 3 String Processing Functions

yzzzyzzz

1667. Fix Names in a Table

ポイント

  • 文字列足すときは+じゃなくてconcat
  • 大文字小文字を変えたい時
    • upper()
    • lower()
  • 文字列から一部を取得したいとき
    • left()
    • right()
    • substr()
      select の最後にnameのエイリアスつけるの忘れてカラム名が上手く出力されずちょっと悩んだ
      他の答えも大体同じで他の解法は見当たらなかった。
select user_id, concat(upper(left(name, 1)), lower(substr(name,2))) as name
from Users
order by user_id

1484. Group Sold Products By The Date

ぱっと見で楽勝じゃん!と思ったけど意外に時間がかかった問題。

ポイント

select 
    sell_date, 
    count(distinct(product)) as num_sold,
    GROUP_CONCAT(distinct product order by product asc separator ',') as products
from Activities
group by sell_date

1527. Patients With a Condition

最初はsubstrとかで分けて、selectに入れてからhaving by でフィルターするのかなと思ったけど上手く思いつかなかった。
試しに%DIAB1%で試したらまあまあ通ったので以下を思いついた。

select patient_id, patient_name, conditions 
from Patients 
where conditions like "DIAB1%"
or conditions like "% DIAB1%"
order by patient_id asc

他の回答は正規表現を使ったものだった。
これはパフォーマンス的にどうなんだろう。
結構色々正規表現で解決できる気もするのでデメリットが少ないならこれから正規表現で書くようにしてみようかな〜

SELECT * FROM patients WHERE conditions REGEXP '\\bDIAB1'