我的 SQL 知识非常基础,需要一些帮助来翻译这个相当长的查询(在 python 脚本中运行,查询一些 AWS athena 数据库,嵌入一些 f 字符串)到简单的英语或流程图。我理解 SELECT * WHERE、JOINS 等概念,但这看起来确实很高级,重命名多个表并处理多种情况。
SELECT usc_customer_id, escape_customer_id, use_sms,
start_date, least(date('{segment_date_str}'), max(booking_date)) as
"max_booking_date",
date('{segment_date_str}') as segment_date,
count(t.job_no) as bookings, count(a.trip_no) as trips,
sum(total_trip_fare) as total_fare, sum(promo_amt) as "promo_amount",
sum(case when promo_amt > 0 then 1 else 0 end) as promo_times
FROM
(
SELECT m.usc_customer_id, m.escape_customer_id, use_sms,
case when date(user_create_time) > date('{start_date}') then date(
user_create_time)
else date('{start_date}') end as start_date,
date(b."req_pickup_dt") as booking_date,
j.job_no, j.status
FROM (SELECT m.*,
CASE WHEN news_sms = 1 OR third_party_sms = 1 THEN True
ELSE False END AS use_sms,
greatest(COALESCE(c.create_time,
m.usc_customer_create_time,m.escape_customer_create_time),
COALESCE(m.usc_customer_create_time,
m.escape_customer_create_time, c.create_time),
COALESCE(m.escape_customer_create_time, c.create_time,
m.usc_customer_create_time)) as user_create_time
FROM "publish_cab"."usc_customer" c join
customer_mapping m
on c.customer_id = m.usc_customer_id where country_code =
'65') m
join "publish_cab"."escape_booking" as b
on m.escape_customer_id = b.cust_id
join "publish_cab"."escape_job" as j
on b.booking_id = j.booking_id
where b.bookingdate between '{start_date_short}' and '
{segment_date_str_short}'
and j.createddate between '{start_date_short}' and '
{segment_date_str_short}'
) t
left join (
select * from "publish_cab"."escape_trip_details"
where createddate between '{start_date_short}' and '
{segment_date_str_short}'
) a
on t.job_no = a.job_no
group by usc_customer_id, escape_customer_id, start_date, use_sms
如果可以将其翻译成某种框图流程图,或相应的 pandas 数据框操作,将不胜感激。
您问“我如何理解 SELECT ... 的含义?”
只需查看行即可。 (你有数据,我们没有。) 这是一个洋葱。 从内部开始,然后向外努力。
SELECT m.*, ...
创建了一个新的关系,
基于 usc_customer
的新表。
因此,它可以与 escape_booking
进行 JOINed
和 escape_job
,进而产生 另一个关系。
如上所述,这些关系有一堆复杂的语法 看起来又大又吓人。 所以要控制这种复杂性。 使用
CREATE VIEW usc_customer_report_v AS SELECT ...
将所有这些表达式封装到命名关系中
您可以方便地查询和加入。
3 路 JOIN 可以进入
escape_v
视图
出于同样的原因。
最后是SELECT m.usc_customer_id, ...
可能会进入另一个观点。
此时,您正在寻找一个更更简单的 整体查询。 你可以推理出每种成分 独立地审查和调试它们 如果您觉得它们没有捕获正确的行 解决您的业务问题。