【问题标题】:SQL how to count the number of credit cards that had at least 1,5,10,20 etc transactionsSQL如何计算至少有1,5,10,20等交易的信用卡数量
【发布时间】:2015-06-19 04:52:45
【问题描述】:

我有一组信用卡交易数据。

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

【问题讨论】:

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


【解决方案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-06-23
    • 2015-06-24
    • 2022-11-02
    • 2011-11-08
    • 2017-10-05
    • 2014-11-06
    • 2021-02-27
    • 1970-01-01
    • 2021-04-07
    相关资源
    最近更新 更多