[英]How can I access variables in subqueries in SQL
我創建了這個查詢來解決這個問題,
SELECT c.ra as Day, round(count(cancelled) / Count(*),2) as "Cancellation Rate" FROM
(
select a.Id, a.ra, a.Status as status, b.Status as cancelled FROM
(
select Id, Client_Id, Driver_Id, Status, Request_at as ra from Trips t
where not exists
(
select 1 from users u
where (t.Client_Id = u.Users_Id or t.Driver_Id = u.Users_Id)
and u.banned = 'Yes'
)
) a LEFT JOIN
(
select Id, Client_Id, Driver_Id, Status, Request_at as ra from Trips t
where not exists
(
select 1 from users u
where (t.Client_Id = u.Users_Id or t.Driver_Id = u.Users_Id)
and u.banned = 'Yes'
) and (t.Status = 'cancelled_by_driver' or t.status = 'cancelled_by_client')
) b on a.Id = b.Id
) c GROUP BY c.ra
為了使該查詢更簡潔,我將其更改為以下內容,但這不起作用。 所以,我的問題是,使此類查詢更簡潔的正確方法是什么?
SELECT c.ra as Day, round(count(cancelled) / Count(*),2) as "Cancellation Rate" FROM
(
select a.Id, a.ra, a.Status as status, b.Status as cancelled FROM
(
select Id, Client_Id, Driver_Id, Status, Request_at as ra from (
select * from Trips t
where not exists
(
select 1 from users u
where (t.Client_Id = u.Users_Id or t.Driver_Id = u.Users_Id)
and u.banned = 'Yes'
)
) t1
) a LEFT JOIN
(
select Id, Client_Id, Driver_Id, Status, Request_at as ra from t1
WHERE (Status = 'cancelled_by_driver' or Status = 'cancelled_by_client')
) b on a.Id = b.Id
) c GROUP BY c.ra
如果我理解正確,我只會使用條件聚合:
SELECT Date(request_at) AS Day,
Round(Avg(status IN ( 'cancelled_by_driver',
'cancelled_by_client' )), 2) AS
"Cancellation Rate"
FROM trips t
WHERE NOT EXISTS (SELECT 1
FROM users u
WHERE u.users_id IN ( t.client_id, t.driver_id )
AND u.banned = 'Yes')
GROUP BY day;
在你的第二個版本t1
根本沒有定義。 如果您想以這種方式重用子查詢,則需要使用 CTE:
with t1 as (
. . .
)
select . . .
然后您可以在查詢中多次引用t1
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.