SELECT MIN(id),
MAX(id)
FROM (SELECT film_id,
COUNT(id) AS id
FROM screenings
GROUP BY film_id) a;
uj5u.com熱心網友回復:
這意味著您正在使用的 SQL 方言(我認為這甚至可能是標準的)要求FROMby中的每個子查詢都給定一個別名,即使該別名在查詢中的其他任何地方都不需要。當然,您現在可以使用別名定義:
SELECT MIN(a.id),MAX(a.id)
FROM
(SELECT film_id, COUNT(id) AS id FROM screenings GROUP BY film_id) a;
但如果清楚每一列的來源(因為它在這里只有一個資料源),則通常沒有必要FROM。
uj5u.com熱心網友回復:
在一個自帶的最后查詢的是一個別名, 它是一個臨時的名稱,可以使用列和表也。在您的查詢中,您試圖從子查詢中獲取 min id 和 max id。
有關別名的更多研究,請單擊此處
uj5u.com熱心網友回復:
示例中查詢的術語是派生表。
該select..from screenings是生產所謂的派生表,你的外select被消耗它的結果集的環境中使用它,就好像它是在自己的權利表-和標準的SQL語法要求它被賦予通過識別別名它,即使在這種情況下它是唯一的“表”。
uj5u.com熱心網友回復:
需要注意的一件事是子選擇中的命名令人困惑。您有COUNT(id) AS id,但該計數的更好名稱類似于num_screenings,因為它正在計算給定film_id出現的放映次數。
子選擇通常可以清楚地寫成 CTE(公用表運算式)。這使它們更容易理解,因為它們位于獨立的小段中。
所以,如果我們結合這三個變化:
- 將子選擇更改為 CTE
- 使用描述性名稱
screening_counts而不是a - 更改
COUNT(id) AS id為AS num_screenings
我們明白了這一點:
WITH screening_counts AS (
SELECT film_id, COUNT(id) AS num_screenings
FROM screenings
GROUP BY film_id
)
SELECT
MIN(num_screenings) AS min_screenings,
MAX(num_screenings) AS max_screenings
FROM screening_counts;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/346761.html
標籤:sql
