SQL-pivot、グループ別ソート(case when)



ハッカーランキングの問題
https://www.hackerrank.com/challenges/occupations/problem
АААААААА
サブクエリはsqlで作成されましたが、sqlでより高度な互換性の高いピボットテーブルは作成されていませんが、今日初めてこのタイプの問題に触れて、私は珍しく慌てていましたが、これは私がまた1つ学んだことを意味しています.
すでに始まっている以上、film表のデータでさらに勉強することにしました.
私はMacBookユーザーです.SQLGateのホームページでmysqlをダウンロード/実行できません.
元手を弁償するって言ったでしょ?直接つながった!ははは🤭
やっぱりちょっと炒めた~
(ソース:https://techblog-history-younghunjo1.tistory.com/159)
これを見ていつもAWSデータベースに接続するように直接応用に成功しました!
MySQLへようこそ~
入力テキストのサンプル・データベース.

23台のテーブルのうち、今日使用されているのはfilm台です.
desc film;

どんな顔をしているか見てみましょう
select * from film limit 5;

この映画のデータを使いたいのですが、
G、PG、R等の映画等級(rating)を各列に分割して、1つの軸心テーブルを作成し、各等級の賃貸料(release_year)が高い順に映画カタログを出力する(title).
  • n行目では、このレベルのn番目のレンタル料の高い映画が出力される.
  • リース料が同じ場合はアルファベット順に出力され、空の値は0で置き換えられます.
  • まず、各階層インデックスの数を計算する変数を設定します.
    set @r1=0, @r2=0, @r3=0, @r4=0, @r5=0;
    mysqlでこの機能を実現するためにcase when文を使用しました.
    CASE
    	WHEN 조건
    	THEN '반환값'
    	ELSE 'WHEN 조건에 해당하지 않을 때 반환 값'
    END
    select max(G) as 'G', max(PG) as 'PG', max(PG_13) as 'PG-13', max(R) as 'R',max(NC_17) as 'NC-17'
    from (select case when rating = 'G' Then title else 0 END AS G,
    case when rating ='PG' then title else 0 END as PG,
    case when rating = 'PG-13' then title else 0 END as PG_13,
    case when rating = 'R' then title else 0 END as R,
    case when rating = 'NC-17' then title else 0 END as NC_17,
    case when rating = 'G' then (@r1:=@r1+1)
    when rating = 'PG' then (@r2:=@r2+1)
    when rating = 'PG-13' then (@r3:=@r3+1)
    when rating = 'R' then (@r4:=@r4+1)
    when rating = 'NC-17' then (@r5:=@r5+1)
    END as RowNumber
    from film
    order by rental_rate desc, title) sub
    group by RowNumber;
    fromセクションのサブクエリでは、case-when文を使用して、小さいサイズを追加したテーブルを作成し、賃貸料(降順)とタイトル順に出力します.

    一見、アルファベット順と似ているので、賃貸料順で並べ替えているか確認しました.

    正しいようですハハ
    ふーん、、、sqlの世界も本当に広くて深い...!
    でもPandasだけで作られた軸心表をsqlで作ったので不思議で嬉しかったです.
    できることが一つ増えた🤓👍