我有三列,全部由1和0组成。对于这些列中的每一列,如何计算在oracle SQL中第一列中的1和第二列或第三列中的1的人的百分比(一个人是一行/ id)?
例如:
id marketing_campaign personal_campaign sales
1 1 0 0
2 1 1 0
1 0 1 1
4 0 0 1
因此,在这种情况下,在所有受到营销活动的人中,50%的人也接受了个人活动,但销售额中只有0%(没有人购买任何东西)。
最终,我想找出人们进入销售时刻的订单。他们首先从营销活动转到个人活动再到销售,或者无论这些渠道如何,他们都会购买。
这是一个虚构的例子,所以我意识到在这个例子中有很多其他方法可以做到这一点,但我希望任何人都可以提供帮助!
我正在寻找的结果是这样的:
percentage marketing_campaign/ personal campaign = 50 %
percentage marketing_campaign/sales = 0%
etc (for all the three column combinations)
答案 0 :(得分:0)
你可以得到这样的百分比:
SELECT COUNT(*),
ROUND(100*(SUM(personal_campaign) / sum(count(*)) over ()),2) perc_personal_campaign,
ROUND(100*(SUM(sales) / sum(count(*)) over ()),2) perc_sales
FROM (
SELECT ID,
CASE
WHEN SUM(personal_campaign) > 0 THEN 1
ELSE 0
end AS personal_campaign,
CASE
WHEN SUM(sales) > 0 THEN 1
ELSE 0
end AS sales
FROM the_table
WHERE ID IN
(SELECT ID FROM the_table WHERE marketing_campaign = 1)
GROUP BY ID
)
我有点过于复杂的事情,因为我的数据仍然不清楚。子查询可确保清除所有重复项,并确保每个人只有marketing_campaign
和sales
中的1或0
关于你的第二个问题:
最终,我想找出人们到达的顺序 销售时刻。他们首先从营销活动转向个人活动 广告系列然后销售,或者他们无论如何都会购买 信道。
在这种情况下,这是不可能的,因为你的表中没有:
如果没有这个,从表中返回的行的顺序将是不可预测的,或者如果您愿意,则是纯随机的。
答案 1 :(得分:0)
使用count
,sum
和case expressions
以及基本算术运算符+,/,*
COUNT(*)
给出了表格中的总人数SUM(column)
在给定列中给出1的总和常见模式为X / COUNT(*) * 100
,用于计算给定值的百分比(val / total * 100%)
一个例子:
SELECT
-- percentage of people that have 1 in marketing_campaign column
SUM( marketing_campaign ) / COUNT(*) * 100 As marketing_campaign_percent,
-- percentage of people that have 1 in sales column
SUM( sales ) / COUNT(*) * 100 As sales_percent,
-- complex condition:
-- percentage of people (one person is one row/ id) who have a 1
-- in the first column and a 1 in the second or third column
COUNT(
CASE WHEN marketing_campaign = 1
AND ( personal_campaign = 1 OR sales = 1 )
THEN 1 END
) / COUNT(*) * 100 As complex_condition_percent
FROM table;