質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

1262閲覧

SELECT文のASカラム名を同じSELECT文の中で使うとエラーになるが、簡潔に表現する方法はありますか

hideki.

総合スコア31

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2022/01/27 03:04

前提・実現したいこと

SELECT文のカラム名に対して「AS」を使って別名を付けられますが、同じSELECT文の中で、その別名を使用するとエラーになります。
例:カラム名がa,b,c,dのテーブルtbl_dummyに対して

SQL

1SELECT 2 (a-b) AS diff_a_b, 3 (diff_a_b - c) AS diff_a_b_c, 4 (diff_a_b_c - d) AS diff_a_b_c_d 5FROM 6 tbl_dummy

このように、ASで別名を付けたカラムの計算結果をその次以降のカラムで参照したいのです。
別名を使用せずに元のカラム名を使用した計算式を書けば問題ないのですが、実際のクエリではもっと複雑な計算式になっているので、このようなときに、簡潔に表現する書き方はありますでしょうか。
ネットで検索しましたが、うまいキーワードが見つからず、分からないので、質問しました。
よろしくお願いします。

バージョン情報:
PostgreSQL10

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

一般的にSELECT句の別名をつかって同じSELECT句で参照することはできません
普通に冗長に書けば良いと思います

SQL

1SELECT 2(a - b) AS diff_a_b, 3(a - b - c) AS diff_a_b_c, 4(a - b - c - d) AS diff_a_b_c_d 5FROM 6 tbl_dummy

投稿2022/01/27 03:10

yambejp

総合スコア114843

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hideki.

2022/01/27 03:24

早々の回答ありがとうございます。 冗長に書く以外に、自分の知らない書き方があればと思って質問しましたが、やはりそのような方法はないのですね。複雑な(長い)計算式なので、計算式を比べないと、処理の意図するところが伝わらないのが気になるところです。
yambejp

2022/01/27 03:41

どうしても再利用が必要な場合はサブクエリを利用する手もありますが インデックスも有効にきかなくなるのでおすすめはしません。 Postgreにも生成列が設定できるようなのでテーブル構成の変更権限をもっているなら 試してもよいかもしれません
hideki.

2022/01/27 04:54

コメントありがとうございます。 「PostgreSQL 生成列」というワードを検索したら、今回のようなケースに適した機能のようでした。 しかし、PostgreSQL12以降の機能のようです。 今回は10なので、SQLの可読性は我慢して、冗長に書くことにします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問