PostgreSQLではGROUP BY句に別名(エイリアス)が使える!?

先日、後輩が書いたSQLのコードレビューをしたら、GROUP BY句にSELECT句で指定した別名を利用していて驚きました。
「いや、これ動くの!?」と。
軽く調べた感じではGROUP BYでSELECTにつけた別名は使えなさそうですが、PostgreSQLでは使えるのかもしれないです(他のRDBでも動くのかは調べてないです)。

以下、試した結果。バージョンは14.1で試しました。

下記のような、「test_result」というテーブルがあるとします。

ここから年代(10代、20代…)ごとの最高点数を表示するために、下記のようなSQLを記載します。

SELECT trunc(age / 10)  || '0代' AS age_date, MAX(score)
FROM test_result
GROUP BY age_date
ORDER BY age_date

結果は下記のとおり。

今まで、こういう結果を書きたかったら、別名使わずに、

SELECT trunc(age / 10)  || '0代' AS age_date, MAX(score)
FROM test_result
GROUP BY trunc(age / 10)  || '0代'
ORDER BY age_date

というように書いてたのですが、別名つかえるなら便利ですね。

コメント

タイトルとURLをコピーしました