每當(dāng)我們需要使用現(xiàn)有表格創(chuàng)建新的表格,然后需要再次查詢時,就表明我們需要使用某種子查詢
在編寫子查詢時,查詢很容易就看起來很復(fù)雜。為了便于閱讀,其實日后經(jīng)常只是你自己要閱讀:
要記住的重要事項是,在使用子查詢時,要讓讀者能夠輕松地判斷查詢的哪個部分將一起執(zhí)行。大部分人的做法是按照某種方式縮進子查詢。如果在子查詢后面有 GROUP BY、ORDER BY、WHERE、HAVING 或任何其他語句,則按照外部查詢的同一級別縮進。
#good
SELECT *
FROM (SELECT DATE_TRUNC('day',occurred_at) AS day,
channel, COUNT(*) as events
FROM web_events
GROUP BY 1,2
ORDER BY 3 DESC) sub
GROUP BY channel
ORDER BY 2 DESC;
#bad
SELECT * FROM (SELECT DATE_TRUNC('day',occurred_at) AS day, channel, COUNT(*) as events FROM web_events GROUP BY 1,2 ORDER BY 3 DESC) sub;
or
SELECT *
FROM (
SELECT DATE_TRUNC('day',occurred_at) AS day,
channel, COUNT(*) as events
FROM web_events
GROUP BY 1,2
ORDER BY 3 DESC) sub;