如何在SQL数据库中搜索客户数量?

时间:2018-02-27 10:55:02

标签: sql amazon-redshift

我有一个名为“accounts”的SQL表,其中包含以下列:

REGISTRATION_DATE ACCOUNT_ID

并使用以下列创建另一个名为“revenue”的SQL表:

ACCOUNT_ID revenue_month sales_revenue

我想要实现的目标是获得以下内容:

获取2017年1月至12月期间注册的客户数量,以及2017年有多少客户购买的商品(即sales_revenue超过0)。

我是SQL的新手,我尝试了以下但我无法做到。

SELECT COUNT account_id
FROM accounts
WHERE registration_date BETWEEN #01/01/2017# AND #12/31/2017#;

应该告诉我2017年注册的帐户数量?

然后

SELECT COUNT account_id
FROM revenue
WHERE sales_revenue > 0;

应该给我收入超过0的帐户数量吗?

我错过了什么?我将不胜感激任何帮助。

谢谢!

7 个答案:

答案 0 :(得分:0)

试试这个:

select count(account_id) as total, 
       sum(case when sales_revenue > 0 then 1 else 0 end) as sales_rev
FROM accounts
WHERE registration_date BETWEEN #01/01/2017# AND #12/31/2017#;

如有任何疑问,请与我联系。

答案 1 :(得分:0)

尝试以下

  

获取2017年1月至12月期间注册的客户数量

SELECT COUNT (account_id)
  FROM accounts
 WHERE registration_date BETWEEN '01-JAN-2017' AND '12-DEC-2017'
  

并计算其中有多少人在2017年买了东西(即sales_revenue超过0)。

SELECT COUNT (account_id)
  FROM revenue
 WHERE sales_revenue > 0
 AND registration_date BETWEEN '01-JAN-2017' AND '12-DEC-2017'

以上是Oracle,您的数据库类似。

答案 2 :(得分:0)

SELECT
    COUNT(DISTINCT accounts.account_id)
FROM
    accounts, revenue
WHERE 
    accounts.registration_date BETWEEN #01/01/2017# AND #12/31/2017#
    AND
    revenue.revenue_month BETWEEN #01/2017# AND #12/2017# 
    AND
    accounts.account_id = revenue.account_id
    AND
    sales_revenue > 0

答案 3 :(得分:0)

Oracle(再次)。您的数据库可能使用不同的功能。

假设REGISTRATION_DATE属于DATE数据类型(是的,它应该是),那么这可能会完成这项工作:

select count(*) 
from accounts
where extract(year from registration_date) = 2017;

收入也是如此 - 假设REVENUE_MONTH是DATE。如果不是,它是什么?

select count(distinct account_id)
from revenue
where extract(year from revenue_month) = 2017
having sum(sales_revenue) > 0;

答案 4 :(得分:0)

如果您发布SQLFiddle,示例数据和预期结果,您将获得更好的答案......

您错过了加入。 表格帐户会告诉您在您关注的日期范围内注册的人员,而表格收入会告诉您他们购买了什么。

不是每个帐户都买了东西,所以你需要一个外部联接。

由于您只想计算购买东西的帐户数量,而不是交易数量,因此您必须使用不同的计数。并非每个平台都支持。

你想要这样的东西:

SELECT COUNT (a.*), count(distinct r.account_id)
FROM accounts a
outer join revenue r
  on a.account_id = r.account_id
WHERE a.registration_date BETWEEN #01/01/2017# AND #12/31/2017#
and   r.revenue_Month between '01/2017' and '12/2017'

答案 5 :(得分:0)

这将为您提供2017年注册的所有客户以及他们是否在2017年购买商品的信息:

select 
  account_id,
  case when exists 
  (
    select *
    from revenue r
    where r.account_id = a.account_id
    and r.sales_revenue > 0
    and r.revenue_month like '%2017%'
  ) then 1 else 0 end as has_bought_in_2017
from accounts a
where year(registration_date) = 2017;

(您可能想要更改LIKE条款;我不知道您的revenue_month是如何构建的。)

现在使用此查询来获取计数:

select 
  count(*) as registered_in_2017,
  sum(has_bought_in_2017) as and_have_bought_in_2017
from (<above query>) q;

答案 6 :(得分:0)

SELECT COUNT(account_id)
   FROM accounts
   WHERE registration_date BETWEEN '01/01/2017' AND '12/31/2017';

这将为您提供在01/01/201712/31/2017

之间注册的帐户ID的计数
SELECT COUNT(account_id)
FROM revenue
WHERE sales_revenue > 0;

这将为您提供sales_revenue大于零的帐户ID数。

如果您想要01/01/201712/31/2017之间的帐户数量 sales_revenue&gt; 0然后:

select count(account_id) 
from accounts a,revenue r
where a.registration_date BETWEEN '01/01/2017' AND '12/31/2017'
and r.sales_revenue > 0;