通常,不可能使用SELECT list at WHERE子句中定義的別名。 另一個限制是不能在WHERE子句中使用窗口函數,因此以下操作也會失敗: SELECT innings_pitched, birth_year, player, NTILE(100) OVER(PARTITION BY innings_pitched) pctl, num_seasonsFROM pitching_cteWHERE season = 2021 AND (NTILE(100) OVER(PARTITION BY innings_pitched)) >= 98; 解決方案是使用另一個級別的cte: WITH pitching_cte AS ( SELECT player, player_id, season, CAST(strftime('%Y', birth_date) AS TEXT) AS birth_year, COUNT(*) AS num_seasons, printf("%i.%i", outs/3, outs % 3) AS innings_pitched FROM pitching INNER JOIN player USING(player_id) GROUP BY player), cte AS ( SELECT innings_pitched, birth_year,