SQL如何计算每月有x次交易的信用卡数量

时间:2015-04-17 14:16:11

标签: mysql sql group-by grouping derived-table

我有一套信用卡交易的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;

问题是上面产生了一个总结果集。我想每月结果集

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

我无法弄清楚如何在这个数据集中按月分组。

1 个答案:

答案 0 :(得分:2)

如果您想要每月的值,那么您需要在内部和外部查询中按月汇总:

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;