首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL如何计算至少有1,5,10,20等事务的信用卡数量

SQL如何计算至少有1,5,10,20等事务的信用卡数量
EN

Stack Overflow用户
提问于 2015-04-13 18:46:17
回答 1查看 48关注 0票数 0

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

代码语言:javascript
复制
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);

我想知道:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-13 19:19:06

由于组重叠,我认为条件聚合是一种更好的方法:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29612776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档