我有一个名为“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的帐户数量吗?
我错过了什么?我将不胜感激任何帮助。
谢谢!
答案 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/2017
和12/31/2017
SELECT COUNT(account_id)
FROM revenue
WHERE sales_revenue > 0;
这将为您提供sales_revenue大于零的帐户ID数。
如果您想要01/01/2017
和12/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;