"""Athena queries.""" from constants.common import Table TABLE_HISTORY = { Table.STREAMS: "tblSpotifyPlaylistStreamsHistory", Table.FOLLOWERS: "tblSpotifyPlaylistFollowersHistory", Table.DATE: "tblDateList", Table.PLAYLIST: "tblPlaylistList", } class AthenaSQL: CREATE_DATABASE = """CREATE DATABASE IF NOT EXISTS {database};""" _CREATE_TABLE = """ CREATE EXTERNAL TABLE IF NOT EXISTS {{database}}.{{table}} ({columns}) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = ',', 'field.delim' = ',' ) LOCATION '{{s3_path}}' TBLPROPERTIES ('has_encrypted_data'='true'); """ CREATE_TABLE = { Table.STREAMS: _CREATE_TABLE.format( columns="`PlaylistId` string, `Date` date, `CountryCode` string, `Streams` int" ), Table.FOLLOWERS: _CREATE_TABLE.format(columns="`PlaylistId` string, `Date` date, `Followers` int"), Table.DATE: _CREATE_TABLE.format(columns="`Date` date"), Table.PLAYLIST: _CREATE_TABLE.format(columns="`PlaylistId` string"), } DROP_TABLE = """DROP TABLE `{database}.{table}`;""" AGGREGATE = { Table.STREAMS: """ SELECT t.Date, t.PlaylistId, SUM(t.Value) AS Value, SUM(CASE WHEN t.CountryCode = 'ad' THEN t.Value ELSE 0 END) AS ValueAD, SUM(CASE WHEN t.CountryCode = 'ae' THEN t.Value ELSE 0 END) AS ValueAE, SUM(CASE WHEN t.CountryCode = 'ag' THEN t.Value ELSE 0 END) AS ValueAG, SUM(CASE WHEN t.CountryCode = 'al' THEN t.Value ELSE 0 END) AS ValueAL, SUM(CASE WHEN t.CountryCode = 'am' THEN t.Value ELSE 0 END) AS ValueAM, SUM(CASE WHEN t.CountryCode = 'ao' THEN t.Value ELSE 0 END) AS ValueAO, SUM(CASE WHEN t.CountryCode = 'ar' THEN t.Value ELSE 0 END) AS ValueAR, SUM(CASE WHEN t.CountryCode = 'at' THEN t.Value ELSE 0 END) AS ValueAT, SUM(CASE WHEN t.CountryCode = 'au' THEN t.Value ELSE 0 END) AS ValueAU, SUM(CASE WHEN t.CountryCode = 'az' THEN t.Value ELSE 0 END) AS ValueAZ, SUM(CASE WHEN t.CountryCode = 'ba' THEN t.Value ELSE 0 END) AS ValueBA, SUM(CASE WHEN t.CountryCode = 'bb' THEN t.Value ELSE 0 END) AS ValueBB, SUM(CASE WHEN t.CountryCode = 'bd' THEN t.Value ELSE 0 END) AS ValueBD, SUM(CASE WHEN t.CountryCode = 'be' THEN t.Value ELSE 0 END) AS ValueBE, SUM(CASE WHEN t.CountryCode = 'bf' THEN t.Value ELSE 0 END) AS ValueBF, SUM(CASE WHEN t.CountryCode = 'bg' THEN t.Value ELSE 0 END) AS ValueBG, SUM(CASE WHEN t.CountryCode = 'bh' THEN t.Value ELSE 0 END) AS ValueBH, SUM(CASE WHEN t.CountryCode = 'bi' THEN t.Value ELSE 0 END) AS ValueBI, SUM(CASE WHEN t.CountryCode = 'bj' THEN t.Value ELSE 0 END) AS ValueBJ, SUM(CASE WHEN t.CountryCode = 'bn' THEN t.Value ELSE 0 END) AS ValueBN, SUM(CASE WHEN t.CountryCode = 'bo' THEN t.Value ELSE 0 END) AS ValueBO, SUM(CASE WHEN t.CountryCode = 'br' THEN t.Value ELSE 0 END) AS ValueBR, SUM(CASE WHEN t.CountryCode = 'bs' THEN t.Value ELSE 0 END) AS ValueBS, SUM(CASE WHEN t.CountryCode = 'bt' THEN t.Value ELSE 0 END) AS ValueBT, SUM(CASE WHEN t.CountryCode = 'bw' THEN t.Value ELSE 0 END) AS ValueBW, SUM(CASE WHEN t.CountryCode = 'by' THEN t.Value ELSE 0 END) AS ValueBY, SUM(CASE WHEN t.CountryCode = 'bz' THEN t.Value ELSE 0 END) AS ValueBZ, SUM(CASE WHEN t.CountryCode = 'ca' THEN t.Value ELSE 0 END) AS ValueCA, SUM(CASE WHEN t.CountryCode = 'cd' THEN t.Value ELSE 0 END) AS ValueCD, SUM(CASE WHEN t.CountryCode = 'cg' THEN t.Value ELSE 0 END) AS ValueCG, SUM(CASE WHEN t.CountryCode = 'ch' THEN t.Value ELSE 0 END) AS ValueCH, SUM(CASE WHEN t.CountryCode = 'ci' THEN t.Value ELSE 0 END) AS ValueCI, SUM(CASE WHEN t.CountryCode = 'cl' THEN t.Value ELSE 0 END) AS ValueCL, SUM(CASE WHEN t.CountryCode = 'cm' THEN t.Value ELSE 0 END) AS ValueCM, SUM(CASE WHEN t.CountryCode = 'co' THEN t.Value ELSE 0 END) AS ValueCO, SUM(CASE WHEN t.CountryCode = 'cr' THEN t.Value ELSE 0 END) AS ValueCR, SUM(CASE WHEN t.CountryCode = 'cv' THEN t.Value ELSE 0 END) AS ValueCV, SUM(CASE WHEN t.CountryCode = 'cw' THEN t.Value ELSE 0 END) AS ValueCW, SUM(CASE WHEN t.CountryCode = 'cy' THEN t.Value ELSE 0 END) AS ValueCY, SUM(CASE WHEN t.CountryCode = 'cz' THEN t.Value ELSE 0 END) AS ValueCZ, SUM(CASE WHEN t.CountryCode = 'de' THEN t.Value ELSE 0 END) AS ValueDE, SUM(CASE WHEN t.CountryCode = 'dj' THEN t.Value ELSE 0 END) AS ValueDJ, SUM(CASE WHEN t.CountryCode = 'dk' THEN t.Value ELSE 0 END) AS ValueDK, SUM(CASE WHEN t.CountryCode = 'dm' THEN t.Value ELSE 0 END) AS ValueDM, SUM(CASE WHEN t.CountryCode = 'do' THEN t.Value ELSE 0 END) AS ValueDO, SUM(CASE WHEN t.CountryCode = 'dz' THEN t.Value ELSE 0 END) AS ValueDZ, SUM(CASE WHEN t.CountryCode = 'ec' THEN t.Value ELSE 0 END) AS ValueEC, SUM(CASE WHEN t.CountryCode = 'ee' THEN t.Value ELSE 0 END) AS ValueEE, SUM(CASE WHEN t.CountryCode = 'eg' THEN t.Value ELSE 0 END) AS ValueEG, SUM(CASE WHEN t.CountryCode = 'es' THEN t.Value ELSE 0 END) AS ValueES, SUM(CASE WHEN t.CountryCode = 'et' THEN t.Value ELSE 0 END) AS ValueET, SUM(CASE WHEN t.CountryCode = 'fi' THEN t.Value ELSE 0 END) AS ValueFI, SUM(CASE WHEN t.CountryCode = 'fj' THEN t.Value ELSE 0 END) AS ValueFJ, SUM(CASE WHEN t.CountryCode = 'fm' THEN t.Value ELSE 0 END) AS ValueFM, SUM(CASE WHEN t.CountryCode = 'fr' THEN t.Value ELSE 0 END) AS ValueFR, SUM(CASE WHEN t.CountryCode = 'ga' THEN t.Value ELSE 0 END) AS ValueGA, SUM(CASE WHEN t.CountryCode = 'gb' THEN t.Value ELSE 0 END) AS ValueGB, SUM(CASE WHEN t.CountryCode = 'gd' THEN t.Value ELSE 0 END) AS ValueGD, SUM(CASE WHEN t.CountryCode = 'ge' THEN t.Value ELSE 0 END) AS ValueGE, SUM(CASE WHEN t.CountryCode = 'gh' THEN t.Value ELSE 0 END) AS ValueGH, SUM(CASE WHEN t.CountryCode = 'gm' THEN t.Value ELSE 0 END) AS ValueGM, SUM(CASE WHEN t.CountryCode = 'gn' THEN t.Value ELSE 0 END) AS ValueGN, SUM(CASE WHEN t.CountryCode = 'gq' THEN t.Value ELSE 0 END) AS ValueGQ, SUM(CASE WHEN t.CountryCode = 'gr' THEN t.Value ELSE 0 END) AS ValueGR, SUM(CASE WHEN t.CountryCode = 'gt' THEN t.Value ELSE 0 END) AS ValueGT, SUM(CASE WHEN t.CountryCode = 'gw' THEN t.Value ELSE 0 END) AS ValueGW, SUM(CASE WHEN t.CountryCode = 'gy' THEN t.Value ELSE 0 END) AS ValueGY, SUM(CASE WHEN t.CountryCode = 'hk' THEN t.Value ELSE 0 END) AS ValueHK, SUM(CASE WHEN t.CountryCode = 'hn' THEN t.Value ELSE 0 END) AS ValueHN, SUM(CASE WHEN t.CountryCode = 'hr' THEN t.Value ELSE 0 END) AS ValueHR, SUM(CASE WHEN t.CountryCode = 'ht' THEN t.Value ELSE 0 END) AS ValueHT, SUM(CASE WHEN t.CountryCode = 'hu' THEN t.Value ELSE 0 END) AS ValueHU, SUM(CASE WHEN t.CountryCode = 'id' THEN t.Value ELSE 0 END) AS ValueID, SUM(CASE WHEN t.CountryCode = 'ie' THEN t.Value ELSE 0 END) AS ValueIE, SUM(CASE WHEN t.CountryCode = 'il' THEN t.Value ELSE 0 END) AS ValueIL, SUM(CASE WHEN t.CountryCode = 'in' THEN t.Value ELSE 0 END) AS ValueIN, SUM(CASE WHEN t.CountryCode = 'iq' THEN t.Value ELSE 0 END) AS ValueIQ, SUM(CASE WHEN t.CountryCode = 'is' THEN t.Value ELSE 0 END) AS ValueIS, SUM(CASE WHEN t.CountryCode = 'it' THEN t.Value ELSE 0 END) AS ValueIT, SUM(CASE WHEN t.CountryCode = 'jm' THEN t.Value ELSE 0 END) AS ValueJM, SUM(CASE WHEN t.CountryCode = 'jo' THEN t.Value ELSE 0 END) AS ValueJO, SUM(CASE WHEN t.CountryCode = 'jp' THEN t.Value ELSE 0 END) AS ValueJP, SUM(CASE WHEN t.CountryCode = 'ke' THEN t.Value ELSE 0 END) AS ValueKE, SUM(CASE WHEN t.CountryCode = 'kg' THEN t.Value ELSE 0 END) AS ValueKG, SUM(CASE WHEN t.CountryCode = 'kh' THEN t.Value ELSE 0 END) AS ValueKH, SUM(CASE WHEN t.CountryCode = 'ki' THEN t.Value ELSE 0 END) AS ValueKI, SUM(CASE WHEN t.CountryCode = 'km' THEN t.Value ELSE 0 END) AS ValueKM, SUM(CASE WHEN t.CountryCode = 'kn' THEN t.Value ELSE 0 END) AS ValueKN, SUM(CASE WHEN t.CountryCode = 'kr' THEN t.Value ELSE 0 END) AS ValueKR, SUM(CASE WHEN t.CountryCode = 'kw' THEN t.Value ELSE 0 END) AS ValueKW, SUM(CASE WHEN t.CountryCode = 'kz' THEN t.Value ELSE 0 END) AS ValueKZ, SUM(CASE WHEN t.CountryCode = 'la' THEN t.Value ELSE 0 END) AS ValueLA, SUM(CASE WHEN t.CountryCode = 'lb' THEN t.Value ELSE 0 END) AS ValueLB, SUM(CASE WHEN t.CountryCode = 'lc' THEN t.Value ELSE 0 END) AS ValueLC, SUM(CASE WHEN t.CountryCode = 'li' THEN t.Value ELSE 0 END) AS ValueLI, SUM(CASE WHEN t.CountryCode = 'lk' THEN t.Value ELSE 0 END) AS ValueLK, SUM(CASE WHEN t.CountryCode = 'lr' THEN t.Value ELSE 0 END) AS ValueLR, SUM(CASE WHEN t.CountryCode = 'ls' THEN t.Value ELSE 0 END) AS ValueLS, SUM(CASE WHEN t.CountryCode = 'lt' THEN t.Value ELSE 0 END) AS ValueLT, SUM(CASE WHEN t.CountryCode = 'lu' THEN t.Value ELSE 0 END) AS ValueLU, SUM(CASE WHEN t.CountryCode = 'lv' THEN t.Value ELSE 0 END) AS ValueLV, SUM(CASE WHEN t.CountryCode = 'ly' THEN t.Value ELSE 0 END) AS ValueLY, SUM(CASE WHEN t.CountryCode = 'ma' THEN t.Value ELSE 0 END) AS ValueMA, SUM(CASE WHEN t.CountryCode = 'mc' THEN t.Value ELSE 0 END) AS ValueMC, SUM(CASE WHEN t.CountryCode = 'md' THEN t.Value ELSE 0 END) AS ValueMD, SUM(CASE WHEN t.CountryCode = 'me' THEN t.Value ELSE 0 END) AS ValueME, SUM(CASE WHEN t.CountryCode = 'mg' THEN t.Value ELSE 0 END) AS ValueMG, SUM(CASE WHEN t.CountryCode = 'mh' THEN t.Value ELSE 0 END) AS ValueMH, SUM(CASE WHEN t.CountryCode = 'mk' THEN t.Value ELSE 0 END) AS ValueMK, SUM(CASE WHEN t.CountryCode = 'ml' THEN t.Value ELSE 0 END) AS ValueML, SUM(CASE WHEN t.CountryCode = 'mn' THEN t.Value ELSE 0 END) AS ValueMN, SUM(CASE WHEN t.CountryCode = 'mo' THEN t.Value ELSE 0 END) AS ValueMO, SUM(CASE WHEN t.CountryCode = 'mr' THEN t.Value ELSE 0 END) AS ValueMR, SUM(CASE WHEN t.CountryCode = 'mt' THEN t.Value ELSE 0 END) AS ValueMT, SUM(CASE WHEN t.CountryCode = 'mu' THEN t.Value ELSE 0 END) AS ValueMU, SUM(CASE WHEN t.CountryCode = 'mv' THEN t.Value ELSE 0 END) AS ValueMV, SUM(CASE WHEN t.CountryCode = 'mw' THEN t.Value ELSE 0 END) AS ValueMW, SUM(CASE WHEN t.CountryCode = 'mx' THEN t.Value ELSE 0 END) AS ValueMX, SUM(CASE WHEN t.CountryCode = 'my' THEN t.Value ELSE 0 END) AS ValueMY, SUM(CASE WHEN t.CountryCode = 'mz' THEN t.Value ELSE 0 END) AS ValueMZ, SUM(CASE WHEN t.CountryCode = 'na' THEN t.Value ELSE 0 END) AS ValueNA, SUM(CASE WHEN t.CountryCode = 'ne' THEN t.Value ELSE 0 END) AS ValueNE, SUM(CASE WHEN t.CountryCode = 'ng' THEN t.Value ELSE 0 END) AS ValueNG, SUM(CASE WHEN t.CountryCode = 'ni' THEN t.Value ELSE 0 END) AS ValueNI, SUM(CASE WHEN t.CountryCode = 'nl' THEN t.Value ELSE 0 END) AS ValueNL, SUM(CASE WHEN t.CountryCode = 'no' THEN t.Value ELSE 0 END) AS ValueNO, SUM(CASE WHEN t.CountryCode = 'np' THEN t.Value ELSE 0 END) AS ValueNP, SUM(CASE WHEN t.CountryCode = 'nr' THEN t.Value ELSE 0 END) AS ValueNR, SUM(CASE WHEN t.CountryCode = 'nz' THEN t.Value ELSE 0 END) AS ValueNZ, SUM(CASE WHEN t.CountryCode = 'om' THEN t.Value ELSE 0 END) AS ValueOM, SUM(CASE WHEN t.CountryCode = 'pa' THEN t.Value ELSE 0 END) AS ValuePA, SUM(CASE WHEN t.CountryCode = 'pe' THEN t.Value ELSE 0 END) AS ValuePE, SUM(CASE WHEN t.CountryCode = 'pg' THEN t.Value ELSE 0 END) AS ValuePG, SUM(CASE WHEN t.CountryCode = 'ph' THEN t.Value ELSE 0 END) AS ValuePH, SUM(CASE WHEN t.CountryCode = 'pk' THEN t.Value ELSE 0 END) AS ValuePK, SUM(CASE WHEN t.CountryCode = 'pl' THEN t.Value ELSE 0 END) AS ValuePL, SUM(CASE WHEN t.CountryCode = 'ps' THEN t.Value ELSE 0 END) AS ValuePS, SUM(CASE WHEN t.CountryCode = 'pt' THEN t.Value ELSE 0 END) AS ValuePT, SUM(CASE WHEN t.CountryCode = 'pw' THEN t.Value ELSE 0 END) AS ValuePW, SUM(CASE WHEN t.CountryCode = 'py' THEN t.Value ELSE 0 END) AS ValuePY, SUM(CASE WHEN t.CountryCode = 'qa' THEN t.Value ELSE 0 END) AS ValueQA, SUM(CASE WHEN t.CountryCode = 'ro' THEN t.Value ELSE 0 END) AS ValueRO, SUM(CASE WHEN t.CountryCode = 'rs' THEN t.Value ELSE 0 END) AS ValueRS, SUM(CASE WHEN t.CountryCode = 'ru' THEN t.Value ELSE 0 END) AS ValueRU, SUM(CASE WHEN t.CountryCode = 'rw' THEN t.Value ELSE 0 END) AS ValueRW, SUM(CASE WHEN t.CountryCode = 'sa' THEN t.Value ELSE 0 END) AS ValueSA, SUM(CASE WHEN t.CountryCode = 'sb' THEN t.Value ELSE 0 END) AS ValueSB, SUM(CASE WHEN t.CountryCode = 'sc' THEN t.Value ELSE 0 END) AS ValueSC, SUM(CASE WHEN t.CountryCode = 'se' THEN t.Value ELSE 0 END) AS ValueSE, SUM(CASE WHEN t.CountryCode = 'sg' THEN t.Value ELSE 0 END) AS ValueSG, SUM(CASE WHEN t.CountryCode = 'si' THEN t.Value ELSE 0 END) AS ValueSI, SUM(CASE WHEN t.CountryCode = 'sk' THEN t.Value ELSE 0 END) AS ValueSK, SUM(CASE WHEN t.CountryCode = 'sl' THEN t.Value ELSE 0 END) AS ValueSL, SUM(CASE WHEN t.CountryCode = 'sm' THEN t.Value ELSE 0 END) AS ValueSM, SUM(CASE WHEN t.CountryCode = 'sn' THEN t.Value ELSE 0 END) AS ValueSN, SUM(CASE WHEN t.CountryCode = 'sr' THEN t.Value ELSE 0 END) AS ValueSR, SUM(CASE WHEN t.CountryCode = 'st' THEN t.Value ELSE 0 END) AS ValueST, SUM(CASE WHEN t.CountryCode = 'sv' THEN t.Value ELSE 0 END) AS ValueSV, SUM(CASE WHEN t.CountryCode = 'sz' THEN t.Value ELSE 0 END) AS ValueSZ, SUM(CASE WHEN t.CountryCode = 'td' THEN t.Value ELSE 0 END) AS ValueTD, SUM(CASE WHEN t.CountryCode = 'tg' THEN t.Value ELSE 0 END) AS ValueTG, SUM(CASE WHEN t.CountryCode = 'th' THEN t.Value ELSE 0 END) AS ValueTH, SUM(CASE WHEN t.CountryCode = 'tj' THEN t.Value ELSE 0 END) AS ValueTJ, SUM(CASE WHEN t.CountryCode = 'tl' THEN t.Value ELSE 0 END) AS ValueTL, SUM(CASE WHEN t.CountryCode = 'tn' THEN t.Value ELSE 0 END) AS ValueTN, SUM(CASE WHEN t.CountryCode = 'to' THEN t.Value ELSE 0 END) AS ValueTO, SUM(CASE WHEN t.CountryCode = 'tr' THEN t.Value ELSE 0 END) AS ValueTR, SUM(CASE WHEN t.CountryCode = 'tt' THEN t.Value ELSE 0 END) AS ValueTT, SUM(CASE WHEN t.CountryCode = 'tv' THEN t.Value ELSE 0 END) AS ValueTV, SUM(CASE WHEN t.CountryCode = 'tw' THEN t.Value ELSE 0 END) AS ValueTW, SUM(CASE WHEN t.CountryCode = 'tz' THEN t.Value ELSE 0 END) AS ValueTZ, SUM(CASE WHEN t.CountryCode = 'ua' THEN t.Value ELSE 0 END) AS ValueUA, SUM(CASE WHEN t.CountryCode = 'ug' THEN t.Value ELSE 0 END) AS ValueUG, SUM(CASE WHEN t.CountryCode = 'us' THEN t.Value ELSE 0 END) AS ValueUS, SUM(CASE WHEN t.CountryCode = 'uy' THEN t.Value ELSE 0 END) AS ValueUY, SUM(CASE WHEN t.CountryCode = 'uz' THEN t.Value ELSE 0 END) AS ValueUZ, SUM(CASE WHEN t.CountryCode = 'vc' THEN t.Value ELSE 0 END) AS ValueVC, SUM(CASE WHEN t.CountryCode = 've' THEN t.Value ELSE 0 END) AS ValueVE, SUM(CASE WHEN t.CountryCode = 'vn' THEN t.Value ELSE 0 END) AS ValueVN, SUM(CASE WHEN t.CountryCode = 'vu' THEN t.Value ELSE 0 END) AS ValueVU, SUM(CASE WHEN t.CountryCode = 'ws' THEN t.Value ELSE 0 END) AS ValueWS, SUM(CASE WHEN t.CountryCode = 'xk' THEN t.Value ELSE 0 END) AS ValueXK, SUM(CASE WHEN t.CountryCode = 'za' THEN t.Value ELSE 0 END) AS ValueZA, SUM(CASE WHEN t.CountryCode = 'zm' THEN t.Value ELSE 0 END) AS ValueZM, SUM(CASE WHEN t.CountryCode = 'zw' THEN t.Value ELSE 0 END) AS ValueZW, SUM(t.Change) AS Change, SUM(CASE WHEN t.CountryCode = 'ad' THEN t.Change ELSE 0 END) AS ChangeAD, SUM(CASE WHEN t.CountryCode = 'ae' THEN t.Change ELSE 0 END) AS ChangeAE, SUM(CASE WHEN t.CountryCode = 'ag' THEN t.Change ELSE 0 END) AS ChangeAG, SUM(CASE WHEN t.CountryCode = 'al' THEN t.Change ELSE 0 END) AS ChangeAL, SUM(CASE WHEN t.CountryCode = 'am' THEN t.Change ELSE 0 END) AS ChangeAM, SUM(CASE WHEN t.CountryCode = 'ao' THEN t.Change ELSE 0 END) AS ChangeAO, SUM(CASE WHEN t.CountryCode = 'ar' THEN t.Change ELSE 0 END) AS ChangeAR, SUM(CASE WHEN t.CountryCode = 'at' THEN t.Change ELSE 0 END) AS ChangeAT, SUM(CASE WHEN t.CountryCode = 'au' THEN t.Change ELSE 0 END) AS ChangeAU, SUM(CASE WHEN t.CountryCode = 'az' THEN t.Change ELSE 0 END) AS ChangeAZ, SUM(CASE WHEN t.CountryCode = 'ba' THEN t.Change ELSE 0 END) AS ChangeBA, SUM(CASE WHEN t.CountryCode = 'bb' THEN t.Change ELSE 0 END) AS ChangeBB, SUM(CASE WHEN t.CountryCode = 'bd' THEN t.Change ELSE 0 END) AS ChangeBD, SUM(CASE WHEN t.CountryCode = 'be' THEN t.Change ELSE 0 END) AS ChangeBE, SUM(CASE WHEN t.CountryCode = 'bf' THEN t.Change ELSE 0 END) AS ChangeBF, SUM(CASE WHEN t.CountryCode = 'bg' THEN t.Change ELSE 0 END) AS ChangeBG, SUM(CASE WHEN t.CountryCode = 'bh' THEN t.Change ELSE 0 END) AS ChangeBH, SUM(CASE WHEN t.CountryCode = 'bi' THEN t.Change ELSE 0 END) AS ChangeBI, SUM(CASE WHEN t.CountryCode = 'bj' THEN t.Change ELSE 0 END) AS ChangeBJ, SUM(CASE WHEN t.CountryCode = 'bn' THEN t.Change ELSE 0 END) AS ChangeBN, SUM(CASE WHEN t.CountryCode = 'bo' THEN t.Change ELSE 0 END) AS ChangeBO, SUM(CASE WHEN t.CountryCode = 'br' THEN t.Change ELSE 0 END) AS ChangeBR, SUM(CASE WHEN t.CountryCode = 'bs' THEN t.Change ELSE 0 END) AS ChangeBS, SUM(CASE WHEN t.CountryCode = 'bt' THEN t.Change ELSE 0 END) AS ChangeBT, SUM(CASE WHEN t.CountryCode = 'bw' THEN t.Change ELSE 0 END) AS ChangeBW, SUM(CASE WHEN t.CountryCode = 'by' THEN t.Change ELSE 0 END) AS ChangeBY, SUM(CASE WHEN t.CountryCode = 'bz' THEN t.Change ELSE 0 END) AS ChangeBZ, SUM(CASE WHEN t.CountryCode = 'ca' THEN t.Change ELSE 0 END) AS ChangeCA, SUM(CASE WHEN t.CountryCode = 'cd' THEN t.Change ELSE 0 END) AS ChangeCD, SUM(CASE WHEN t.CountryCode = 'cg' THEN t.Change ELSE 0 END) AS ChangeCG, SUM(CASE WHEN t.CountryCode = 'ch' THEN t.Change ELSE 0 END) AS ChangeCH, SUM(CASE WHEN t.CountryCode = 'ci' THEN t.Change ELSE 0 END) AS ChangeCI, SUM(CASE WHEN t.CountryCode = 'cl' THEN t.Change ELSE 0 END) AS ChangeCL, SUM(CASE WHEN t.CountryCode = 'cm' THEN t.Change ELSE 0 END) AS ChangeCM, SUM(CASE WHEN t.CountryCode = 'co' THEN t.Change ELSE 0 END) AS ChangeCO, SUM(CASE WHEN t.CountryCode = 'cr' THEN t.Change ELSE 0 END) AS ChangeCR, SUM(CASE WHEN t.CountryCode = 'cv' THEN t.Change ELSE 0 END) AS ChangeCV, SUM(CASE WHEN t.CountryCode = 'cw' THEN t.Change ELSE 0 END) AS ChangeCW, SUM(CASE WHEN t.CountryCode = 'cy' THEN t.Change ELSE 0 END) AS ChangeCY, SUM(CASE WHEN t.CountryCode = 'cz' THEN t.Change ELSE 0 END) AS ChangeCZ, SUM(CASE WHEN t.CountryCode = 'de' THEN t.Change ELSE 0 END) AS ChangeDE, SUM(CASE WHEN t.CountryCode = 'dj' THEN t.Change ELSE 0 END) AS ChangeDJ, SUM(CASE WHEN t.CountryCode = 'dk' THEN t.Change ELSE 0 END) AS ChangeDK, SUM(CASE WHEN t.CountryCode = 'dm' THEN t.Change ELSE 0 END) AS ChangeDM, SUM(CASE WHEN t.CountryCode = 'do' THEN t.Change ELSE 0 END) AS ChangeDO, SUM(CASE WHEN t.CountryCode = 'dz' THEN t.Change ELSE 0 END) AS ChangeDZ, SUM(CASE WHEN t.CountryCode = 'ec' THEN t.Change ELSE 0 END) AS ChangeEC, SUM(CASE WHEN t.CountryCode = 'ee' THEN t.Change ELSE 0 END) AS ChangeEE, SUM(CASE WHEN t.CountryCode = 'eg' THEN t.Change ELSE 0 END) AS ChangeEG, SUM(CASE WHEN t.CountryCode = 'es' THEN t.Change ELSE 0 END) AS ChangeES, SUM(CASE WHEN t.CountryCode = 'et' THEN t.Change ELSE 0 END) AS ChangeET, SUM(CASE WHEN t.CountryCode = 'fi' THEN t.Change ELSE 0 END) AS ChangeFI, SUM(CASE WHEN t.CountryCode = 'fj' THEN t.Change ELSE 0 END) AS ChangeFJ, SUM(CASE WHEN t.CountryCode = 'fm' THEN t.Change ELSE 0 END) AS ChangeFM, SUM(CASE WHEN t.CountryCode = 'fr' THEN t.Change ELSE 0 END) AS ChangeFR, SUM(CASE WHEN t.CountryCode = 'ga' THEN t.Change ELSE 0 END) AS ChangeGA, SUM(CASE WHEN t.CountryCode = 'gb' THEN t.Change ELSE 0 END) AS ChangeGB, SUM(CASE WHEN t.CountryCode = 'gd' THEN t.Change ELSE 0 END) AS ChangeGD, SUM(CASE WHEN t.CountryCode = 'ge' THEN t.Change ELSE 0 END) AS ChangeGE, SUM(CASE WHEN t.CountryCode = 'gh' THEN t.Change ELSE 0 END) AS ChangeGH, SUM(CASE WHEN t.CountryCode = 'gm' THEN t.Change ELSE 0 END) AS ChangeGM, SUM(CASE WHEN t.CountryCode = 'gn' THEN t.Change ELSE 0 END) AS ChangeGN, SUM(CASE WHEN t.CountryCode = 'gq' THEN t.Change ELSE 0 END) AS ChangeGQ, SUM(CASE WHEN t.CountryCode = 'gr' THEN t.Change ELSE 0 END) AS ChangeGR, SUM(CASE WHEN t.CountryCode = 'gt' THEN t.Change ELSE 0 END) AS ChangeGT, SUM(CASE WHEN t.CountryCode = 'gw' THEN t.Change ELSE 0 END) AS ChangeGW, SUM(CASE WHEN t.CountryCode = 'gy' THEN t.Change ELSE 0 END) AS ChangeGY, SUM(CASE WHEN t.CountryCode = 'hk' THEN t.Change ELSE 0 END) AS ChangeHK, SUM(CASE WHEN t.CountryCode = 'hn' THEN t.Change ELSE 0 END) AS ChangeHN, SUM(CASE WHEN t.CountryCode = 'hr' THEN t.Change ELSE 0 END) AS ChangeHR, SUM(CASE WHEN t.CountryCode = 'ht' THEN t.Change ELSE 0 END) AS ChangeHT, SUM(CASE WHEN t.CountryCode = 'hu' THEN t.Change ELSE 0 END) AS ChangeHU, SUM(CASE WHEN t.CountryCode = 'id' THEN t.Change ELSE 0 END) AS ChangeID, SUM(CASE WHEN t.CountryCode = 'ie' THEN t.Change ELSE 0 END) AS ChangeIE, SUM(CASE WHEN t.CountryCode = 'il' THEN t.Change ELSE 0 END) AS ChangeIL, SUM(CASE WHEN t.CountryCode = 'in' THEN t.Change ELSE 0 END) AS ChangeIN, SUM(CASE WHEN t.CountryCode = 'iq' THEN t.Change ELSE 0 END) AS ChangeIQ, SUM(CASE WHEN t.CountryCode = 'is' THEN t.Change ELSE 0 END) AS ChangeIS, SUM(CASE WHEN t.CountryCode = 'it' THEN t.Change ELSE 0 END) AS ChangeIT, SUM(CASE WHEN t.CountryCode = 'jm' THEN t.Change ELSE 0 END) AS ChangeJM, SUM(CASE WHEN t.CountryCode = 'jo' THEN t.Change ELSE 0 END) AS ChangeJO, SUM(CASE WHEN t.CountryCode = 'jp' THEN t.Change ELSE 0 END) AS ChangeJP, SUM(CASE WHEN t.CountryCode = 'ke' THEN t.Change ELSE 0 END) AS ChangeKE, SUM(CASE WHEN t.CountryCode = 'kg' THEN t.Change ELSE 0 END) AS ChangeKG, SUM(CASE WHEN t.CountryCode = 'kh' THEN t.Change ELSE 0 END) AS ChangeKH, SUM(CASE WHEN t.CountryCode = 'ki' THEN t.Change ELSE 0 END) AS ChangeKI, SUM(CASE WHEN t.CountryCode = 'km' THEN t.Change ELSE 0 END) AS ChangeKM, SUM(CASE WHEN t.CountryCode = 'kn' THEN t.Change ELSE 0 END) AS ChangeKN, SUM(CASE WHEN t.CountryCode = 'kr' THEN t.Change ELSE 0 END) AS ChangeKR, SUM(CASE WHEN t.CountryCode = 'kw' THEN t.Change ELSE 0 END) AS ChangeKW, SUM(CASE WHEN t.CountryCode = 'kz' THEN t.Change ELSE 0 END) AS ChangeKZ, SUM(CASE WHEN t.CountryCode = 'la' THEN t.Change ELSE 0 END) AS ChangeLA, SUM(CASE WHEN t.CountryCode = 'lb' THEN t.Change ELSE 0 END) AS ChangeLB, SUM(CASE WHEN t.CountryCode = 'lc' THEN t.Change ELSE 0 END) AS ChangeLC, SUM(CASE WHEN t.CountryCode = 'li' THEN t.Change ELSE 0 END) AS ChangeLI, SUM(CASE WHEN t.CountryCode = 'lk' THEN t.Change ELSE 0 END) AS ChangeLK, SUM(CASE WHEN t.CountryCode = 'lr' THEN t.Change ELSE 0 END) AS ChangeLR, SUM(CASE WHEN t.CountryCode = 'ls' THEN t.Change ELSE 0 END) AS ChangeLS, SUM(CASE WHEN t.CountryCode = 'lt' THEN t.Change ELSE 0 END) AS ChangeLT, SUM(CASE WHEN t.CountryCode = 'lu' THEN t.Change ELSE 0 END) AS ChangeLU, SUM(CASE WHEN t.CountryCode = 'lv' THEN t.Change ELSE 0 END) AS ChangeLV, SUM(CASE WHEN t.CountryCode = 'ly' THEN t.Change ELSE 0 END) AS ChangeLY, SUM(CASE WHEN t.CountryCode = 'ma' THEN t.Change ELSE 0 END) AS ChangeMA, SUM(CASE WHEN t.CountryCode = 'mc' THEN t.Change ELSE 0 END) AS ChangeMC, SUM(CASE WHEN t.CountryCode = 'md' THEN t.Change ELSE 0 END) AS ChangeMD, SUM(CASE WHEN t.CountryCode = 'me' THEN t.Change ELSE 0 END) AS ChangeME, SUM(CASE WHEN t.CountryCode = 'mg' THEN t.Change ELSE 0 END) AS ChangeMG, SUM(CASE WHEN t.CountryCode = 'mh' THEN t.Change ELSE 0 END) AS ChangeMH, SUM(CASE WHEN t.CountryCode = 'mk' THEN t.Change ELSE 0 END) AS ChangeMK, SUM(CASE WHEN t.CountryCode = 'ml' THEN t.Change ELSE 0 END) AS ChangeML, SUM(CASE WHEN t.CountryCode = 'mn' THEN t.Change ELSE 0 END) AS ChangeMN, SUM(CASE WHEN t.CountryCode = 'mo' THEN t.Change ELSE 0 END) AS ChangeMO, SUM(CASE WHEN t.CountryCode = 'mr' THEN t.Change ELSE 0 END) AS ChangeMR, SUM(CASE WHEN t.CountryCode = 'mt' THEN t.Change ELSE 0 END) AS ChangeMT, SUM(CASE WHEN t.CountryCode = 'mu' THEN t.Change ELSE 0 END) AS ChangeMU, SUM(CASE WHEN t.CountryCode = 'mv' THEN t.Change ELSE 0 END) AS ChangeMV, SUM(CASE WHEN t.CountryCode = 'mw' THEN t.Change ELSE 0 END) AS ChangeMW, SUM(CASE WHEN t.CountryCode = 'mx' THEN t.Change ELSE 0 END) AS ChangeMX, SUM(CASE WHEN t.CountryCode = 'my' THEN t.Change ELSE 0 END) AS ChangeMY, SUM(CASE WHEN t.CountryCode = 'mz' THEN t.Change ELSE 0 END) AS ChangeMZ, SUM(CASE WHEN t.CountryCode = 'na' THEN t.Change ELSE 0 END) AS ChangeNA, SUM(CASE WHEN t.CountryCode = 'ne' THEN t.Change ELSE 0 END) AS ChangeNE, SUM(CASE WHEN t.CountryCode = 'ng' THEN t.Change ELSE 0 END) AS ChangeNG, SUM(CASE WHEN t.CountryCode = 'ni' THEN t.Change ELSE 0 END) AS ChangeNI, SUM(CASE WHEN t.CountryCode = 'nl' THEN t.Change ELSE 0 END) AS ChangeNL, SUM(CASE WHEN t.CountryCode = 'no' THEN t.Change ELSE 0 END) AS ChangeNO, SUM(CASE WHEN t.CountryCode = 'np' THEN t.Change ELSE 0 END) AS ChangeNP, SUM(CASE WHEN t.CountryCode = 'nr' THEN t.Change ELSE 0 END) AS ChangeNR, SUM(CASE WHEN t.CountryCode = 'nz' THEN t.Change ELSE 0 END) AS ChangeNZ, SUM(CASE WHEN t.CountryCode = 'om' THEN t.Change ELSE 0 END) AS ChangeOM, SUM(CASE WHEN t.CountryCode = 'pa' THEN t.Change ELSE 0 END) AS ChangePA, SUM(CASE WHEN t.CountryCode = 'pe' THEN t.Change ELSE 0 END) AS ChangePE, SUM(CASE WHEN t.CountryCode = 'pg' THEN t.Change ELSE 0 END) AS ChangePG, SUM(CASE WHEN t.CountryCode = 'ph' THEN t.Change ELSE 0 END) AS ChangePH, SUM(CASE WHEN t.CountryCode = 'pk' THEN t.Change ELSE 0 END) AS ChangePK, SUM(CASE WHEN t.CountryCode = 'pl' THEN t.Change ELSE 0 END) AS ChangePL, SUM(CASE WHEN t.CountryCode = 'ps' THEN t.Change ELSE 0 END) AS ChangePS, SUM(CASE WHEN t.CountryCode = 'pt' THEN t.Change ELSE 0 END) AS ChangePT, SUM(CASE WHEN t.CountryCode = 'pw' THEN t.Change ELSE 0 END) AS ChangePW, SUM(CASE WHEN t.CountryCode = 'py' THEN t.Change ELSE 0 END) AS ChangePY, SUM(CASE WHEN t.CountryCode = 'qa' THEN t.Change ELSE 0 END) AS ChangeQA, SUM(CASE WHEN t.CountryCode = 'ro' THEN t.Change ELSE 0 END) AS ChangeRO, SUM(CASE WHEN t.CountryCode = 'rs' THEN t.Change ELSE 0 END) AS ChangeRS, SUM(CASE WHEN t.CountryCode = 'ru' THEN t.Change ELSE 0 END) AS ChangeRU, SUM(CASE WHEN t.CountryCode = 'rw' THEN t.Change ELSE 0 END) AS ChangeRW, SUM(CASE WHEN t.CountryCode = 'sa' THEN t.Change ELSE 0 END) AS ChangeSA, SUM(CASE WHEN t.CountryCode = 'sb' THEN t.Change ELSE 0 END) AS ChangeSB, SUM(CASE WHEN t.CountryCode = 'sc' THEN t.Change ELSE 0 END) AS ChangeSC, SUM(CASE WHEN t.CountryCode = 'se' THEN t.Change ELSE 0 END) AS ChangeSE, SUM(CASE WHEN t.CountryCode = 'sg' THEN t.Change ELSE 0 END) AS ChangeSG, SUM(CASE WHEN t.CountryCode = 'si' THEN t.Change ELSE 0 END) AS ChangeSI, SUM(CASE WHEN t.CountryCode = 'sk' THEN t.Change ELSE 0 END) AS ChangeSK, SUM(CASE WHEN t.CountryCode = 'sl' THEN t.Change ELSE 0 END) AS ChangeSL, SUM(CASE WHEN t.CountryCode = 'sm' THEN t.Change ELSE 0 END) AS ChangeSM, SUM(CASE WHEN t.CountryCode = 'sn' THEN t.Change ELSE 0 END) AS ChangeSN, SUM(CASE WHEN t.CountryCode = 'sr' THEN t.Change ELSE 0 END) AS ChangeSR, SUM(CASE WHEN t.CountryCode = 'st' THEN t.Change ELSE 0 END) AS ChangeST, SUM(CASE WHEN t.CountryCode = 'sv' THEN t.Change ELSE 0 END) AS ChangeSV, SUM(CASE WHEN t.CountryCode = 'sz' THEN t.Change ELSE 0 END) AS ChangeSZ, SUM(CASE WHEN t.CountryCode = 'td' THEN t.Change ELSE 0 END) AS ChangeTD, SUM(CASE WHEN t.CountryCode = 'tg' THEN t.Change ELSE 0 END) AS ChangeTG, SUM(CASE WHEN t.CountryCode = 'th' THEN t.Change ELSE 0 END) AS ChangeTH, SUM(CASE WHEN t.CountryCode = 'tj' THEN t.Change ELSE 0 END) AS ChangeTJ, SUM(CASE WHEN t.CountryCode = 'tl' THEN t.Change ELSE 0 END) AS ChangeTL, SUM(CASE WHEN t.CountryCode = 'tn' THEN t.Change ELSE 0 END) AS ChangeTN, SUM(CASE WHEN t.CountryCode = 'to' THEN t.Change ELSE 0 END) AS ChangeTO, SUM(CASE WHEN t.CountryCode = 'tr' THEN t.Change ELSE 0 END) AS ChangeTR, SUM(CASE WHEN t.CountryCode = 'tt' THEN t.Change ELSE 0 END) AS ChangeTT, SUM(CASE WHEN t.CountryCode = 'tv' THEN t.Change ELSE 0 END) AS ChangeTV, SUM(CASE WHEN t.CountryCode = 'tw' THEN t.Change ELSE 0 END) AS ChangeTW, SUM(CASE WHEN t.CountryCode = 'tz' THEN t.Change ELSE 0 END) AS ChangeTZ, SUM(CASE WHEN t.CountryCode = 'ua' THEN t.Change ELSE 0 END) AS ChangeUA, SUM(CASE WHEN t.CountryCode = 'ug' THEN t.Change ELSE 0 END) AS ChangeUG, SUM(CASE WHEN t.CountryCode = 'us' THEN t.Change ELSE 0 END) AS ChangeUS, SUM(CASE WHEN t.CountryCode = 'uy' THEN t.Change ELSE 0 END) AS ChangeUY, SUM(CASE WHEN t.CountryCode = 'uz' THEN t.Change ELSE 0 END) AS ChangeUZ, SUM(CASE WHEN t.CountryCode = 'vc' THEN t.Change ELSE 0 END) AS ChangeVC, SUM(CASE WHEN t.CountryCode = 've' THEN t.Change ELSE 0 END) AS ChangeVE, SUM(CASE WHEN t.CountryCode = 'vn' THEN t.Change ELSE 0 END) AS ChangeVN, SUM(CASE WHEN t.CountryCode = 'vu' THEN t.Change ELSE 0 END) AS ChangeVU, SUM(CASE WHEN t.CountryCode = 'ws' THEN t.Change ELSE 0 END) AS ChangeWS, SUM(CASE WHEN t.CountryCode = 'xk' THEN t.Change ELSE 0 END) AS ChangeXK, SUM(CASE WHEN t.CountryCode = 'za' THEN t.Change ELSE 0 END) AS ChangeZA, SUM(CASE WHEN t.CountryCode = 'zm' THEN t.Change ELSE 0 END) AS ChangeZM, SUM(CASE WHEN t.CountryCode = 'zw' THEN t.Change ELSE 0 END) AS ChangeZW FROM ( SELECT p.PlaylistId, d.Date, s.CountryCode, SUM(CASE WHEN s.Date >= date_add('day', -6, d.Date) THEN s.Streams ELSE 0 END) AS Value, SUM(CASE WHEN s.Date >= date_add('day', -6, d.Date) THEN s.Streams ELSE -s.Streams END) AS Change FROM tblDateList d JOIN tblPlaylistList p ON 1=1 LEFT JOIN tblSpotifyPlaylistStreamsHistory s ON s.PlaylistId = p.PlaylistId AND s.Date BETWEEN date_add('day', -13, d.Date) AND d.Date GROUP BY d.Date, s.CountryCode, p.PlaylistId HAVING SUM(s.Streams) > 0 ) t GROUP BY t.Date, t.PlaylistId; """, Table.FOLLOWERS: """ SELECT d.Date, p.PlaylistId, SUM( CASE f.Date WHEN d.Date THEN f.Followers WHEN date_add('day', -7, d.Date) THEN -f.Followers ELSE 0 END ) AS Value, SUM( CASE f.Date WHEN d.Date THEN f.Followers WHEN date_add('day', -7, d.Date) THEN -f.Followers * 2 WHEN date_add('day', -14, d.Date) THEN f.Followers ELSE 0 END ) AS Change FROM tblDateList d JOIN tblPlaylistList p ON 1=1 LEFT JOIN tblSpotifyPlaylistFollowersHistory f ON f.PlaylistId = p.PlaylistId AND f.Date IN (date_add('day', -14, d.Date), date_add('day', -7, d.Date), d.Date) GROUP BY p.PlaylistId, d.Date HAVING SUM(f.Followers) > 0 AND COUNT(f.Date) = 3; """, }