0

クレジットカード取引のデータセットがあります。

create table trans (
  card_id int,
  amount int
);

insert into trans values (1, 1);
insert into trans values (2, 1);
insert into trans values (3, 1);
insert into trans values (4, 1);
insert into trans values (5, 1);
insert into trans values (5, 1);
insert into trans values (6, 1);
insert into trans values (6, 1);
insert into trans values (7, 1);
insert into trans values (7, 1);
insert into trans values (8, 1);
insert into trans values (8, 1);
insert into trans values (8, 1);
insert into trans values (9, 1);
insert into trans values (9, 1);
insert into trans values (9, 1);
insert into trans values (10, 1);
insert into trans values (10, 1);
insert into trans values (10, 1);
insert into trans values (10, 1);

私は知りたいです:

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

SQL:

select count, sum(count2) from
  (
  select count, count(*) count2 from
    (
    select card_id, count(*) count
    from trans
    group by card_id 
    ) d
  group by count
  ) d2
where count> {is at least __} /*this is the part causing an error*/
group by count
order by count

SQL 構文にエラーがあります...

http://sqlfiddle.com/#!9/705b5/5

4

1 に答える 1

1

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

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;
于 2015-04-13T19:19:06.950 に答える