重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

PostgreSQL8.2で、
select * from XX order by 項目名で
データ検索した結果に、1~nの通番を
振りたいのですが、ポスグレで実現する
方法はあるでしょか。

A 回答 (2件)

#1回答者です。



#1で提示したSQLが、「グループ内通番」のSQLになっていたので訂正します。

【SQL例】列c1でユニークになる場合
select
(select count(*) from t1 where x.c1>=c1) as rn,
c1,c2
from t1 as x
order by rn
    • good
    • 0

PostgreSQLには、OracleやSQL Server 2005にあるような、row_number()といった関数がないので、SQLだけでやるには「自己結合して通番付け」するといった細工が必要です。



(1)アプリケーションの言語側でやった方が、SQLでやるより軽いし簡単です。それでもなお、SQLでやりたいですか?

(2)表に主キー(行データを一意に識別できる1個以上の列)はありますよね?

【SQL例】列c1、c2で一意に識別できる場合
select count(*) as rn,x.c1,x.c2
from t1 as x,t1 as y
where x.c1=y.c1 and x.c2>=y.c2
group by x.c1,x.c2

主キー以外のすべての列を表示したい場合は、上記クエリから、さらに全列表示のクエリを作る必要があります。
    • good
    • 0
この回答へのお礼

PostgreSQLで実現できない事が分かりました。

PHPとPostgreSQLを連携しているので、
PostgreSQLだけで実現しないで、PHPのループカウンタで
対応します。
ご回答ありがとうございます。

お礼日時:2007/03/22 08:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!