2017-09-09 10 views
0

私はtotal_city_popという7行目に列別名を作成しました。SELECT句で列エイリアスの名前が付けられた直後にその列エイリアスを使用する方法はありますか?

次に、8行目で、そのエイリアスを新しい計算で使用しようとしました。

なぜできない:私は "列は ""(ci.city_proper_pop + ci.metroarea_pop)/ AS total_city_pop ...^LINE 8が存在しません" total_city_popというエラーメッセージを受け取った

しかし、私はそれを作成した後にエイリアス名を使用しますか?

ここではコードです -

SELECT co.code, ci.name AS capital_city, ci.city_proper_pop, ci.metroarea_pop, ci.urbanarea_pop, 
    CASE 
     WHEN (ci.city_proper_pop + ci.metroarea_pop + ci.urbanarea_pop) IS NULL 
     THEN (ci.city_proper_pop + ci.urbanarea_pop) 
     ELSE (ci.city_proper_pop + ci.metroarea_pop + ci.urbanarea_pop) END AS total_city_pop, 
    (ci.city_proper_pop + ci.metroarea_pop)/total_city_pop AS percent_outside_urbanarea 
FROM countries AS co 
    INNER JOIN cities AS ci ON co.capital = ci.name 
    WHERE continent LIKE '%America%' OR continent LIKE 'Europe'  
    ORDER BY total_city_pop DESC 
    LIMIT 10; 

ありがとうございました。

+1

できません。サブクエリを使用するか、式を繰り返す必要があります。 –

+0

https://dev.mysql.com/doc/refman/5.7/en/problems-with-alias.html –

答えて

3

サブクエリで式を繰り返す必要があります。しかし、私はあなたがCOALESCE()を使用して式を簡略化することをお勧め:MySQLサポート計算列の

SELECT co.code, ci.name AS capital_city, ci.city_proper_pop, ci.metroarea_pop, ci.urbanarea_pop, 
     (ci.city_proper_pop + ci.metroarea_pop + COALECE(ci.urbanarea_pop, 0)) as total_city_pop, 
     (ci.city_proper_pop + ci.metroarea_pop)/(ci.city_proper_pop + ci.metroarea_pop + COALECE(ci.urbanarea_pop, 0)) AS percent_outside_urbanarea 
FROM countries co INNER JOIN 
    cities ci 
    ON co.capital = ci.name 
WHERE continent LIKE '%America%' OR continent LIKE 'Europe'  
ORDER BY total_city_pop DESC 
LIMIT 10; 

最新バージョンを。これらを使用すると、計算を表の定義に入れることができます。

+0

よろしくお願いします。ありがとうございます。 – Sebastian

関連する問題