1

クレジット カード トランザクションの MySQL データ セットがあります。

create table trans (
  transdate date,
  card_id int
);

私は知りたいです:

1. how many cards were used to make at least 1 transaction, per month
2. how many cards were used to make at least 5 transactions, per month
3. how many cards were used to make at least 10 transactions, per month
4. how many cards were used to make at least 20 transactions, per month
etc...

グループが重複しているため、条件付き集計の方が優れたアプローチのようです。

select sum(cnt >= 1) as trans_1,
       sum(cnt >= 5) as trans_5,
       sum(cnt >= 10) as trans_10,
       sum(cnt >= 20) as trans_20
from (select card_id, count(*) as cnt
      from trans
      group by card_id 
      ) d;

問題は、上記が合計で結果セットを生成することです。1 か月あたりの結果セットが必要です。

year | month | trans_1 | trans_5 | trans_10 | trans_20 | etc
2015 |     1 |       1 |       1 |        0 |        0 | 
2015 |     2 |
2015 |     3 |

このデータセットで月ごとにグループ化する方法がわかりません。

4

1 に答える 1

3

月ごとの値が必要な場合は、内部クエリと外部クエリで月ごとに集計する必要があります。

select yr, mon,
       sum(cnt >= 1) as trans_1,
       sum(cnt >= 5) as trans_5,
       sum(cnt >= 10) as trans_10,
       sum(cnt >= 20) as trans_20
from (select year(transdate) as yr, month(transdate) as mon, card_id, count(*) as cnt
      from trans
      group by card_id, year(transdate), month(transdate)
     ) d
group by yr, mon;
于 2015-04-17T14:20:53.703 に答える