# sql宿題提出 ・角田さんが作成 ## 問題1-1 一日のコメント人数が20人以上でギフト人数が2以下のライバーを最新順に抽出する(DailyKpiSummaries) ``` SELECT l.liverId, name, rank, registeredAt, dls.commentUu as comentUu, dls.itemUu as commentUu FROM Livers l JOIN DailyLiverSummaries dls ON l.liverId = ¢dls.liverId ORDER BY registeredAt ``` ![1-1結果](./sql_homework_result/1-1result.png) ## 問題1-2 Kanamiの2019年7月以降のデイリーの応援ポイント・配信時間の推移を応援ポイント・配信時間の多い順に抽出する(DailyKpiSummaries ``` SELECT l.liverId, l.name, l.rank, dls.cheerPoint, dls.liveTime, dls.on FROM Livers l JOIN DailyLiverSummaries dls ON dls.on > '2019-07-01' WHERE l.name = '🐰Kanami♡🙏🏺ポコクロック' ORDER BY l.rank desc, dls.liveTime desc ``` ![1-2結果](./sql_homework_result/1-2result.png) ## 問題2-1 7月新規ライバーの月間配信日数ランキングを作る(MonthlyKPISummariesなど) ``` SELECT l.liverId, l.name, l.registeredAt as '登録日', mks.liveDayCount FROM Livers l JOIN MonthlyKpiSummaries as mks ON mks.liverId = l.liverId AND mks.monthEndsOn = '2019-07-31' WHERE registeredAt BETWEEN '2019-07-01' AND '2019-07-31' ORDER BY mks.liveDayCount desc ``` ![2-1結果](./sql_homework_result/2-1result.png) ## 問題2-2 各ライバー毎に7/1と8/1の獲得★バッジ数を比較する(badge_extended) ・badge_extendedテーブルが消えていた? ``` SELECT l.liverId, l.name, @tBOJ1 := dks1.badges -> '$.total."1"' + dks1.badges -> '$.total."2"' + dks1.badges -> '$.total."3"' + dks1.badges -> '$.total."4"' + dks1.badges -> '$.total."5"' as totalBadgeOnJuly1th, @tBOA1 := dks2.badges -> '$.total."1"' + dks2.badges -> '$.total."2"' + dks2.badges -> '$.total."3"' + dks2.badges -> '$.total."4"' + dks2.badges -> '$.total."5"' as totalBadgeOnAugust1th, (CASE WHEN @tBOJ1 = 0 THEN @tBOA1 WHEN @tBOJ1 >= 1 THEN (SELECT TRUNCATE( (@tBOA1 /@tBOJ1) , 2)) ELSE 0 END) as ratio FROM Livers l INNER JOIN DailyKpiSummaries dks1 on dks1.liverId = l.liverId AND dks1.onDay = '2019-07-01' INNER JOIN DailyKpiSummaries dks2 on dks2.liverId = l.liverId AND dks2.onDay = '2019-08-01' ORDER BY ratio desc ``` ![2-2結果](./sql_homework_result/2-2result.png) ## 問題2-3 東京に住んでそうなライバーを抽出する(Livers)※答えは色々あります ``` SELECT l.liverId, l.name, l.place FROM Livers l WHERE l.place LIKE '%東京%' ``` ![2-3結果](./sql_homework_result/2-3result.png) ## 問題3-1 7月のライバー別時間ダイヤ・盛り上がりダイヤの集計※ダイヤ合計(時間別+盛り上がりダイヤ)は今回の宿題では出さなくて良い" ``` SELECT sum(dgd.timeDiamond) + sum(dgd.bonusDiamond) as 7月合計ダイヤモンド, l.name, l.liverId FROM DailyGainedDiamonds dgd JOIN Livers l ON l.liverId = dgd.liverId WHERE dgd.on BETWEEN '2019-07-01' AND '2019-07-31' GROUP BY l.name ``` ![3-1結果](./sql_homework_result/3-1result.png) ## 問題3-2 7月ラスト一週間で★1バッジをデイリーで3個以上取得できたことがあるライバーを知りたい ``` SELECT l.name, l.liverId, MAX(dks.badges -> '$.total."1"') as star1 FROM DailyKpiSummaries dks JOIN Livers l ON l.liverId = dks.liverId WHERE dks.onDay BETWEEN ((SELECT LAST_DAY( '2019-07-01' )) - INTERVAL 7 DAY ) AND (SELECT LAST_DAY( '2019-07-01' )) AND dks.badges -> '$.total."1"' >= 3 GROUP BY l.name ORDER BY star1 desc ``` ![3-2結果](./sql_homework_result/3-2result.png) ## 問題4-1 "4-1: 5月新規ライバー一覧を下記KPIを抽出する(5月新規はSPRINGのシート参照) https://docs.google.com/spreadsheets/d/1fVic4e2ovTBMeg5WSDpvxMYmRQP80PXd4bifj_zt1VA/edit#gid=339238425 翌月末ランク 初回配信日 最終配信日 目標配信時間クリアフラグ(一ヶ月40時間以上配信した人、一ヶ月60時間以上配信した人を区別できるようなフラグを立てる) 5月ダイヤ合計 6月ダイヤ合計 6月のダイヤ先月比(5月に対して6月は何%伸びた・減ったか)" ・目標配信時間クリアフラグのみデータの場所がわからずできなかった。 ``` SELECT l1.liverId, l1.name, MIN(dlrh.afterLiverRank) as endOfNextMonthRank, MAX(l2.finishedAt) as lastBroadcastDay, MIN(l2.finishedAt) as firstBroadcastDay, MAX(dgd1.bonusDiamond) + MAX(dgd1.coordinationDiamond) + MAX(dgd1.timeDiamond) as diamondSumOnMay, MAX(dgd2.bonusDiamond) + MAX(dgd2.coordinationDiamond) + MAX(dgd2.timeDiamond) as diamondSumOnJun, ( SELECT TRUNCATE( ( (MAX(dgd2.bonusDiamond) + MAX(dgd2.coordinationDiamond) + MAX(dgd2.timeDiamond)) / (MAX(dgd1.bonusDiamond) + MAX(dgd1.coordinationDiamond) + MAX(dgd1.timeDiamond)) ), 2) ) as ratio FROM Livers l1 INNER JOIN Lives l2 on l1.liverId = l2.liverId INNER JOIN DailyGainedDiamonds dgd1 on dgd1.liverId = l1.liverId AND dgd1.on BETWEEN '2019-05-01' AND '2019-05-31' INNER JOIN DailyGainedDiamonds dgd2 on dgd2.liverId = l1.liverId AND dgd2.on BETWEEN '2019-06-01' AND '2019-06-31' INNER JOIN DailyLiverRankHistories dlrh on dlrh.liverId = l1.liverId AND dlrh.on < '2019-07-01' WHERE l1.registeredAt BETWEEN '2019-05-01' AND '2019-05-31' GROUP BY l1.liverId ``` ![4-1結果](./sql_homework_result/4-1result.png)