TIL 2021.07.28 | (SQL) Subquery 1
サブクエリから整理するのは難しいです.完全に理解しているかどうか分かりませんが、書くのはずっと難しいです.😢
文章がどんどん長くなって、理解度も下がってきたようです.
そのせいか今日はTILを書かないので少し書きましょう
エラーや改善すべき点をいつでも残してください.🙏
●夏休み勉強SQL
SQL理論を学ぶため、SQL中→9月に中国SQL資格取得を目指します
オンライン学習SQL:スパルタコードクラブ
▶マカオで支払ったユーザー情報の表示
1) inner join
▶Subqueryは、where、select、fromセクションで役立ちます.
1)Whereに入るSubquery:whereフィールド名in(subquery)
(b)Subqueryの実行:対応するuser idをリストする
(c) where .. inセクションではsubquery結果の「user idのリスト」条件でフィルタリング
(d)条件を満たす結果出力
2)SelectのSubquery:selectフィールド名、フィールド名、(subquery)from.
(b)selectのサブクエリは、各行のデータ上で実行される.
(c)subqueryで1行のuser idのデータの平均好値を計算する.
(d)一緒に出力!
3)FromのSubqueryに入る
▶私が作ったセレクトや既存のテーブルを入れたいときに使う
(a)まずサブクエリのselectを実行する.
(b)これを表と見なし、外のselectを実行する!
1)回答1:全プレイヤーのポイント平均値より大きいプレイヤーのみのデータ抽出
❗なぜ違う結果をもたらすのですか?(質疑応答に保持)
3)解答3:授業別平均like数
忘れないで!🤣
文章がどんどん長くなって、理解度も下がってきたようです.
そのせいか今日はTILを書かないので少し書きましょう
エラーや改善すべき点をいつでも残してください.🙏
●夏休み勉強SQL
SQL理論を学ぶため、SQL中→9月に中国SQL資格取得を目指します
オンライン学習SQL:スパルタコードクラブ
TIL 2021.07.28 start!
1.複数の方法で作成できるクエリー
▶マカオで支払ったユーザー情報の表示
1) inner join
select u.user_id, u.name, u.email from users u
inner join orders o on u.user_id =o.user_id
where o.payment_method = 'kakaopay'
2) Subqueryselect * from users u
where user_id in (
select user_id from orders
where payment_method = 'kakaopay'
)
❗文が長ければ長いほど、タブで整理される2.サブクエリの内容のクリーンアップ
▶Subqueryは、where、select、fromセクションで役立ちます.
1)Whereに入るSubquery:whereフィールド名in(subquery)
#카카오페이로 결제한 주문건 유저들만, 유저 테이블에서 출력해주고 싶을 때
select * from users u
where u.user_id in (select o.user_id from orders o
where o.payment_method = 'kakaopay');
実行(a)from:ユーザーデータの取得(b)Subqueryの実行:対応するuser idをリストする
(c) where .. inセクションではsubquery結果の「user idのリスト」条件でフィルタリング
(d)条件を満たす結果出力
2)SelectのSubquery:selectフィールド名、フィールド名、(subquery)from.
#'오늘의 다짐' 데이터를 보고 싶은데 '오늘의 다짐' 좋아요의 수가,
본인이 평소에 받았던 좋아요 수에 비해 얼마나 높고 낮은지가 궁금
select c.checkin_id, c.user_id, c.likes,
(select avg(likes) from checkins c2
where c2.user_id = c.user_id) as avg_like_user
from checkins c;
(a)以外のselect*from文にデータを行単位で出力します.(b)selectのサブクエリは、各行のデータ上で実行される.
(c)subqueryで1行のuser idのデータの平均好値を計算する.
(d)一緒に出力!
3)FromのSubqueryに入る
▶私が作ったセレクトや既存のテーブルを入れたいときに使う
(a)まずサブクエリのselectを実行する.
(b)これを表と見なし、外のselectを実行する!
#a 유저 별 좋아요 평균
select user_id, round(avg(likes),1) as avg_like from checkins
group by user_id
#b 유저 별 포인트/ 포인트와 like의 상관정도
select pu.user_id, a.avg_like, pu.point from point_users pu
inner join (
select user_id, round(avg(likes),1) as avg_like from checkins
group by user_id
) a on pu.user_id = a.user_id
3.練習サブクエリ(where,select)💛
1)回答1:全プレイヤーのポイント平均値より大きいプレイヤーのみのデータ抽出
#내가 쓴 퀴리 (정답)
select * from point_users pu
where point > (
select round(avg(point),1) as avg_point from point_users pu
)
2)解答2:李氏誠プレイヤーのポイント平均値より大きいプレイヤーデータを抽出する#내가 쓴 쿼리 (error)
select * from point_users pu
where point > (
select u.name, round(avg(pu.point),0) as avg_point from users u
inner join point_users pu on u.user_id = pu.user_id
where u.name like '이**'
)
#중간 단계에서는 에러가 나지 않고 이씨 성을 가진 유저의 평균값이 제대로 나옴
select u.name, round(avg(pu.point),0) as avg_point from users u
inner join point_users pu on u.user_id = pu.user_id
where u.name like '이**'
#정답
select * from point_users pu
where pu.point >
(select avg(pu2.point) from point_users pu2
inner join users u
on pu2.user_id = u.user_id
where u.name = "이**")
❗なぜ違う結果をもたらすのですか?(質疑応答に保持)
3)解答3:授業別平均like数
#내가 쓴 쿼리
select c.checkin_id, c.course_id, c.user_id, c.likes,
(
select round(avg(likes),1) from checkins
where course_id = c.course_id
) as course_avg
from checkins c
c.likeの後ろに引用符がなく、ずっとエラーが発生しています.忘れないで!🤣
Reference
この問題について(TIL 2021.07.28 | (SQL) Subquery 1), 我々は、より多くの情報をここで見つけました https://velog.io/@dkswldp95/TIL-2021.07.82-SQL-Subqueryテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol