Open1
【LeetCode】SQL I Day 3 String Processing Functions
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
ぱっと見で楽勝じゃん!と思ったけど意外に時間がかかった問題。
ポイント
- group by したカラムのそれぞれの値を足したいときはgroup_concat()
- group_concat()にはオプションがままある
- https://dev.mysql.com/doc/refman/5.6/ja/group-by-functions.html#function_group-concat
- あとはcountの指定カラムを深く考えずにsell_dateにしていてcountの数が合わないことで少し詰まった
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'