此 SQL 查询的纯文本翻译是什么?

问题描述 投票:0回答:1

我的 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 数据框操作,将不胜感激。

python sql mysql query-optimization
1个回答
0
投票

您问“我如何理解 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, ...
可能会进入另一个观点。

此时,您正在寻找一个更简单的 整体查询。 你可以推理出每种成分 独立地审查和调试它们 如果您觉得它们没有捕获正确的行 解决您的业务问题。

© www.soinside.com 2019 - 2024. All rights reserved.