我试图创建一个漏斗图,但我的数据是在一个广泛的格式现在。它有几个我想比较的组(例如。, A
以及 B
在下面的例子中),它们在不同的比例上,所以我想使用比例以及原始值。
我有一张这样的起始表:
| group | One | Two | Three |
|-------|-----|-----|-------|
| A | 100 | 75 | 50 |
| B | 10 | 7 | 6 |
|-------|-----|-----|-------|
我需要把table弄成这样:
| group | stage | count | proportion of stage One |
|-------|-------|-------|-------------------------|
| A | One | 100 | 1 |
| A | Two | 75 | 0.75 |
| A | Three | 50 | 0.5 |
| B | One | 10 | 1 |
| B | Two | 7 | 0.7 |
| B | Three | 6 | 0.6 |
|-------|-------|-------|-------------------------|
该比例的计算方法是每行的值除以该组的最大值。第一阶段总是100%,第二阶段是 count
对于那一行除以 count
为了这个群体的价值。
我所能做的最好的事情就是用python连接到数据库,并使用pandas来融化表,但是我真的希望将所有内容都保存在sql脚本中。
我已经摸索了很久,没有取得任何进展。非常感谢您的帮助。
2条答案
按热度按时间0vvn1miw1#
你可以用一个
UNION
查询,首先选择One
,那么Two
以及Three
通过适当的划分得到比例:输出:
在dbfiddle上演示
68de4m5k2#
我建议横向连接:
横向连接应该比横向连接快一点
union all
在少量的数据上。随着数据越来越大,只扫描一次表是一个更大的胜利。然而,最大的成功在于“表”实际上是一个更复杂的查询。这样,横向连接的性能就会显著提高。