PostgreSQLでは、ランク付け、レポート、およびデータ分析のために、データの特定の行番号を取得できます。 PostgreSQLで行番号を取得する方法は次のとおりです。 PostgreSQLの行IDに基づいてさらに分析するために使用できます。
PostgreSQLで行番号を取得する方法
PostgreSQLで特定の行番号を取得する方法は次のとおりです。 PostgreSQL 8.4以降で使用可能なROW_NUMBER()ウィンドウ関数とPostgreSQL<8.4用のプレーンSQLを使用して行番号を取得する方法を見ていきます。
次のテーブルがあるとしますsales(order_date、sale)
postgres=# create table sales(order_date date,sale int); postgres=# insert into sales values('2020-04-01',210), ('2020-04-02',125),('2020-04-03',150),('2020-04-04',230), ('2020-04-05',200),('2020-04-10',220),('2020-04-06',25), ('2020-04-07',215),('2020-04-08',300),('2020-04-09',250); postgres=# select * from sales; order_date | sale ------------+------ 2020-04-01 | 210 2020-04-02 | 125 2020-04-03 | 150 2020-04-04 | 230 2020-04-05 | 200 2020-04-10 | 220 2020-04-06 | 25 2020-04-07 | 215 2020-04-08 | 300 2020-04-09 | 250
ボーナスリード:PostgreSQLでパーセンタイルを計算する方法
ROW_NUMBER()を使用してPostgreSQLで行番号を取得する方法
PostgreSQL 8.4以降、ROW_NUMBER()関数を使用してPostgreSQLの行番号を簡単に表示できます。 PostgreSQLで行IDを取得するためのSQLクエリは次のとおりです。
postgres=# select row_number() over(), * from sales; row_number | order_date | sale ------------+------------+------ 1 | 2020-04-01 | 210 2 | 2020-04-02 | 125 3 | 2020-04-03 | 150 4 | 2020-04-04 | 230 5 | 2020-04-05 | 200 6 | 2020-04-10 | 220 7 | 2020-04-06 | 25 8 | 2020-04-07 | 215 9 | 2020-04-08 | 300 10 | 2020-04-09 | 250
上記のSQLクエリでは、row_number()ウィンドウ関数を使用して、各行の行番号を生成します。また、over()を使用して、順序なしですべての行の行番号を表示するようにPostgreSQLに指示します。
ボーナスリード:PostgreSQLで中央値を計算する方法
行番号を生成する前に行を並べ替える場合は、以下に示すように、OVER()にORDERBY句を追加できます
postgres=# select row_number() over(order by sale), * from sales; row_number | order_date | sale ------------+------------+------ 1 | 2020-04-06 | 25 2 | 2020-04-02 | 125 3 | 2020-04-03 | 150 4 | 2020-04-05 | 200 5 | 2020-04-01 | 210 6 | 2020-04-07 | 215 7 | 2020-04-10 | 220 8 | 2020-04-04 | 230 9 | 2020-04-09 | 250 10 | 2020-04-08 | 300
ROW_NUMBERまたはOVER()ウィンドウ関数でWHERE句を使用することはできません。したがって、行番号を生成する前にデータをフィルタリングする場合は、以下に示すように、サブクエリでWHEREcauseを使用する必要があります
postgres=# select row_number() over(order by sale), * from ( select * from sales where sale>100) filtered_sales; row_number | order_date | sale ------------+------------+------ 1 | 2020-04-02 | 125 2 | 2020-04-03 | 150 3 | 2020-04-05 | 200 4 | 2020-04-01 | 210 5 | 2020-04-07 | 215 6 | 2020-04-10 | 220 7 | 2020-04-04 | 230 8 | 2020-04-09 | 250 9 | 2020-04-08 | 300
generate_seriesを使用してPostgreSQLで行番号を取得することもできます。ただし、 generate_seriesを使用して行IDを生成しないことをお勧めします。 スケーラブルではないため。
ボーナスリード:generate_seriesを使用してPostgreSQLで欠落している日付を埋める方法
ROW_NUMBER()を使用せずにPostgreSQL(<8.4)で行番号を取得する方法
PostgreSQL <8.4を使用している場合は、 row_number() ウィンドウ機能が使用できない場合があります。その場合、自己結合を使用してPostgreSQLで行番号を取得する必要があります。これがそのクエリです。
postgres=# SELECT count(*) rownum, foo.* FROM sales foo JOIN sales bar ON (foo.order_date <= bar.order_date) GROUP BY foo.order_date, foo.sale ORDER BY rownum ; rownum | order_date | sale --------+------------+------ 1 | 2020-04-10 | 220 2 | 2020-04-09 | 250 3 | 2020-04-08 | 300 4 | 2020-04-07 | 215 5 | 2020-04-06 | 25 6 | 2020-04-05 | 200 7 | 2020-04-04 | 230 8 | 2020-04-03 | 150 9 | 2020-04-02 | 125 10 | 2020-04-01 | 210
PostgreSQLで行番号を取得したら、PostgreSQLレポートツールを使用して、以下に示すようなテーブルでデータをレポートし、チームと共有できます。
PostgreSQLデータベースからチャート、ダッシュボード、レポートを作成したい場合は、Ubiqを試すことができます。 14日間の無料トライアルを提供しています。