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

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

解決済

3回答

4141閲覧

SQLで累積購入回数をレコード毎にカウントしたい

退会済みユーザー

退会済みユーザー

総合スコア0

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クリップ

投稿2018/10/23 09:35

同一IDの購入日毎に累積の回数をカウントしたいと考えています。

成果イメージを添付しておりますので、ご確認ください。

イメージ説明

どのようにSQLを組めばいいか困っています。
何卒よろしくお願いいたします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/10/23 09:37

丸投げはダメですよ~。
yambejp

2018/10/23 09:48 編集

データは画像じゃなくテキストで貼ってください。それとどういう結果を希望するのか追記してください。IDと購入日だけあってその件数を右に集計するってことですかね?
guest

回答3

0

ベストアンサー

Window関数を使用すると良いと思います。

SQL

1select ID, 購入日, count(*) over(partition by id order by 購入日) as 累計購入回数 2from tbl 3order by 購入日, ID

DATA

1create table tbl(id int,購入日 date,unique(id,購入日)); 2insert into tbl values 3(500,'2018-04-16'), 4(501,'2018-04-16'), 5(500,'2018-04-17') 6;

追記

購入日単位でカウントということは集計が必要になるので、相関サブクエリーの方が効率的です。

SQL

1select id,購入日 2 ,(select count(distinct 購入日)+1 from tbl where id=t1.id and 購入日<t1.購入日) as 累計購入回数 3from tbl as t1 4order by 購入日 ,id

DATA

1create table tbl(id int,購入日 date); 2insert into tbl values 3(500,'2001-03-24'), 4(500,'2001-03-24'), 5(500,'2001-03-24'), 6(500,'2001-03-27'), 7(500,'2001-03-27'), 8(500,'2001-03-27'), 9(500,'2001-03-27'), 10(500,'2001-03-27'), 11(500,'2001-03-27'), 12(500,'2001-07-21'), 13(500,'2001-07-29'), 14(500,'2003-04-11'), 15(500,'2004-04-26'), 16(500,'2004-09-25'), 17(500,'2006-02-03') 18;

投稿2018/10/23 10:16

編集2018/10/24 04:21
sazi

総合スコア25195

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

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

退会済みユーザー

退会済みユーザー

2018/10/24 00:46

sazi様 至らぬ質問に丁寧にお答えいただき、ありがとうございます。 早速、試させていただいたところ 下記のように帰ってきました。 購入日のレコードごとに、累計購入回数が+1づつ増えていくイメージなのですが、 可能でしょうか? <結果> id   購入日  累積購入回数 500 20180416 2 501 20180416 1 500 20180417 2 <出力希望> id   購入日  累積購入回数 500 20180416 1 501 20180416 1 500 20180417 2
sazi

2018/10/24 02:27

元のSQLでは以下のようになるはずです(累計の値は合っている) id   購入日  累積購入回数 500 20180416 1 500 20180417 2 501 20180416 1 希望に沿うには並びを指定する必要があります。 (回答にorder by を追記しました)
退会済みユーザー

退会済みユーザー

2018/10/24 04:03

sazi様 早速のご回答ありがとうございます。 説明不足で申し訳ございません 結果で再度、お聞きしたいことがございます。 どうぞよろしくお願いいたします。 <結果> id   購入日  累積購入回数 500 20010324 3 500 20010324 3 500 20010324 3 500 20010327 9 500 20010327 9 500 20010327 9 500 20010327 9 500 20010327 9 500 20010327 9 500 20010721 10 500 20010729 11 500 20030411 12 500 20040426 13 500 20040925 14 500 20060203 15 <出力希望データ> id   購入日  累積購入回数 500 20010324 1 500 20010324 1 500 20010324 1 500 20010327 2 500 20010327 2 500 20010327 2 500 20010327 2 500 20010327 2 500 20010327 2 500 20010721 3 500 20010729 4 500 20030411 5 500 20040426 6 500 20040925 7 500 20060203 8
sazi

2018/10/24 04:22

追記しました。
退会済みユーザー

退会済みユーザー

2018/10/24 05:19

sazi様 ご丁寧に対応いただき、誠にありがとうございました。 無事完了できました。
guest

0

もしかしてこういうことですか?

  • 元データ

SQL

1create table tbl(id int,kounyu date,unique(id,kounyu)); 2insert into tbl values 3(500,'2002-04-16'), 4(501,'2002-04-16'), 5(503,'2002-04-16'), 6(501,'2002-04-17'), 7(503,'2002-04-17'), 8(508,'2002-04-18'), 9(510,'2002-04-19'), 10(513,'2002-04-20'), 11(514,'2002-04-20'), 12(503,'2002-04-20');
  • 検索

SQL

1select id,kounyu,(select count(*)+1 from tbl where id=t1.id and kounyu<t1.kounyu) as ruikei 2from tbl as t1 3order by kounyu asc,id asc

投稿2018/10/23 09:48

yambejp

総合スコア114843

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

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

退会済みユーザー

退会済みユーザー

2018/10/24 07:14

yambejp様 拙い質問にご丁寧にご対応いただき、誠にありがとうございました。 アドバイスいただいたように 相関サブクエリで解決いたしました。
guest

0

こうですかね

SQL

1SELECT ID, 購入日, COUNT(購入日) as 累計購入回数 2FROM tablename 3GROUP BY ID, 購入日 4ORDER BY 購入日

投稿2018/10/23 11:00

編集2018/10/23 11:02
kantanopapan

総合スコア51

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

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

sazi

2018/10/23 14:32

累計になってませんよ
kantanopapan

2018/10/23 14:49

あっ!累計ですね 失礼しましたorz
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問