I am trying to write a query that will calculate the conversion rate associated with each name in a table such as the one below (assume the real table has thousands of different names)
| Name | Converted |
|---|---|
| abc | TRUE |
| abc | FALSE |
| xyz | FALSE |
| dhk | TRUE |
| dhk | TRUE |
| dhk | TRUE |
| dhk | FALSE |
Since abc has one true and one false the query should display a conversion rate of 50% (1 TRUE / 2 Total = 50%). For dhk the conversion rate would be 75% (3 TRUEs/ 4 Total), and for xyz it would be 0% since there are no TRUEs.
The final output of the query should look like the following:
| Name | Conversion Rate |
|---|---|
| abc | 50% |
| xyz | 0% |
| dhk | 75% |
OR if I could figure out how to get the output below that would also be enough for me to figure out the rest
| Name | Converted | Conversion Rate |
|---|---|---|
| abc | TRUE | 50% |
| abc | FALSE | 50% |
| xyz | FALSE | 0% |
| dhk | TRUE | 75% |
| dhk | TRUE | 75% |
| dhk | TRUE | 75% |
| dhk | FALSE | 75% |
Any help would be appreciated, thank you.
CodePudding user response:
Use below
select name,
avg(if(converted, 100, 0)) ConversionRate
from your_table
group by name
if applied to sample data in your question - output is
or, you can use below
select *,
avg(if(converted, 100, 0)) over(partition by name) ConversionRate
from your_table
with output
CodePudding user response:
This is an intuitive solution, using the traditional conversion rate formula:
SELECT Name,
COUNTIF(Converted)/COUNT(1) ConversionRate
FROM conversion_table
GROUP BY Name


