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日間の無料トライアルを提供しています。