特殊处理的sql加条件

This commit is contained in:
haoqiyue 2023-03-01 18:22:16 +08:00
parent d8a5735cea
commit d02b25e5c0

View File

@ -763,29 +763,52 @@ class BehaviorAnalysis:
stat_date = self.start_date stat_date = self.start_date
end_date = self.end_date end_date = self.end_date
game = self.game game = self.game
sql = f""" if len(event_filter) > 0:
select aa.date as date,round((a/b)*100,2) as values from where_fil = str(and_(*event_filter, *base_where).compile(compile_kwargs={"literal_binds": True}))
(select toDate(addHours({game}.event."#event_time", 8)) AS date,uniqCombined(if({game}.event."#event_name" = 'pay', {game}.event."#account_id", NULL)) as a from {game}.event sql = f"""
WHERE addHours({game}.event."#event_time", 8) >= '{stat_date}' AND addHours({game}.event."#event_time", 8) <= '{end_date}' select aa.date as date,round((a/b)*100,2) as values from
AND {game}.event."#event_name"='pay' and orderid NOT LIKE '%GM%' GROUP BY toDate(addHours({game}.event."#event_time", 8))) as aa (select toDate(addHours({game}.event."#event_time", 8)) AS date,uniqCombined(if({game}.event."#event_name" = 'pay', {game}.event."#account_id", NULL)) as a from {game}.event
LEFT join WHERE {where_fil}
(SELECT toDate(addHours({game}.event."#event_time", 8)) AS date, round(uniqExact({game}.event."#account_id"), 2) AS b AND {game}.event."#event_name"='pay' and orderid NOT LIKE '%GM%' GROUP BY toDate(addHours({game}.event."#event_time", 8))) as aa
FROM {game}.event LEFT join
WHERE addHours({game}.event."#event_time", 8) >= '{stat_date}' AND addHours({game}.event."#event_time", 8) <= '{end_date}' (SELECT toDate(addHours({game}.event."#event_time", 8)) AS date, round(uniqExact({game}.event."#account_id"), 2) AS b
GROUP BY toDate(addHours({game}.event."#event_time", 8))) as bb on aa.date = bb.date ORDER by date FROM {game}.event
""" WHERE {where_fil}
GROUP BY toDate(addHours({game}.event."#event_time", 8))) as bb on aa.date = bb.date ORDER by date
"""
else:
sql = f"""
select aa.date as date,round((a/b)*100,2) as values from
(select toDate(addHours({game}.event."#event_time", 8)) AS date,uniqCombined(if({game}.event."#event_name" = 'pay', {game}.event."#account_id", NULL)) as a from {game}.event
WHERE addHours({game}.event."#event_time", 8) >= '{stat_date}' AND addHours({game}.event."#event_time", 8) <= '{end_date}'
AND {game}.event."#event_name"='pay' and orderid NOT LIKE '%GM%' GROUP BY toDate(addHours({game}.event."#event_time", 8))) as aa
LEFT join
(SELECT toDate(addHours({game}.event."#event_time", 8)) AS date, round(uniqExact({game}.event."#account_id"), 2) AS b
FROM {game}.event
WHERE addHours({game}.event."#event_time", 8) >= '{stat_date}' AND addHours({game}.event."#event_time", 8) <= '{end_date}'
GROUP BY toDate(addHours({game}.event."#event_time", 8))) as bb on aa.date = bb.date ORDER by date
"""
# 单独设备付费率的拿出来 # 单独设备付费率的拿出来
if event.get('customEvent') == 'pay.touch_device_count/login.touch_device_count': if event.get('customEvent') == 'pay.touch_device_count/login.touch_device_count':
stat_date = self.start_date stat_date = self.start_date
end_date = self.end_date end_date = self.end_date
game = self.game game = self.game
sql = f""" if len(event_filter) > 0:
select toDate(addHours({game}.event."#event_time", 8)) AS date,round((uniqCombined(if({game}.event."#event_name" = 'pay',{game}.event.`#distinct_id`,NULL)) / uniqCombined(if({game}.event."#event_name" = 'login',{game}.event."#distinct_id",NULL))) * 100,2) AS values where_fil = str(and_(*event_filter, *base_where).compile(compile_kwargs={"literal_binds": True}))
FROM {game}.event sql = f"""
WHERE addHours({game}.event."#event_time", 8) >= '{stat_date}' select toDate(addHours({game}.event."#event_time", 8)) AS date,round((uniqCombined(if({game}.event."#event_name" = 'pay',{game}.event.`#distinct_id`,NULL)) / uniqCombined(if({game}.event."#event_name" = 'login',{game}.event."#distinct_id",NULL))) * 100,2) AS values
AND addHours({game}.event."#event_time", 8) <= '{end_date}' FROM {game}.event
AND {game}.event."#event_name" IN ('pay', 'login') WHERE {where_fil}
GROUP BY toDate(addHours({game}.event."#event_time", 8)) ORDER BY date LIMIT 100000 AND {game}.event."#event_name" IN ('pay', 'login')
GROUP BY toDate(addHours({game}.event."#event_time", 8)) ORDER BY date LIMIT 100000
"""
else:
sql = f"""
select toDate(addHours({game}.event."#event_time", 8)) AS date,round((uniqCombined(if({game}.event."#event_name" = 'pay',{game}.event.`#distinct_id`,NULL)) / uniqCombined(if({game}.event."#event_name" = 'login',{game}.event."#distinct_id",NULL))) * 100,2) AS values
FROM {game}.event
WHERE addHours({game}.event."#event_time", 8) >= '{stat_date}' AND addHours({game}.event."#event_time", 8) <= '{end_date}'
AND {game}.event."#event_name" IN ('pay', 'login')
GROUP BY toDate(addHours({game}.event."#event_time", 8)) ORDER BY date LIMIT 100000
""" """
# 单独把新增付费人数(以设备为维度)拿出来 # 单独把新增付费人数(以设备为维度)拿出来
if event.get('event_attr') == '触发用户数' and ['is_new_device', 'orderid'] == [i['columnName'] for i in if event.get('event_attr') == '触发用户数' and ['is_new_device', 'orderid'] == [i['columnName'] for i in