【发布时间】:2022-01-04 12:38:44
【问题描述】:
我在雪花中有一个按预期工作的查询,但我觉得必须有更好的方法来做到这一点,所以我正在检查是否有人对此有更好、更有效的解决方案。
我想统计有多少用户拥有 SA4 和 SA5。然后检查它们是否是 multi_unit 。对于 multi_unit 的,计算他们拥有的其他 ST 产品的数量。
原表:
| AB4_ind | AB5_ind | Multi_unit | AB300_ind | AB10_ind | AB20_ind | AB30_ind |
|---|---|---|---|---|---|---|
| 1 | 0 | 1 | 1 | 1 | 0 | 1 |
| 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 1 | 0 | 0 | 0 |
| 1 | 1 | 1 | 0 | 0 | 1 | 0 |
| 0 | 1 | 1 | 0 | 0 | 1 | 1 |
查询需要的输出表:
| Product | CNT | Multi | AB300 | AB10 | AB20 | AB30 |
|---|---|---|---|---|---|---|
| AB4 | 3 | 1 | 1 | 1 | 0 | 1 |
| AB5 | 4 | 3 | 1 | 0 | 2 | 1 |
这是有效的查询,但我觉得必须有更好的方法来做到这一点。请让我知道你的想法:) 赞赏
SELECT
'AB4' AS Product,
COUNT(*) AS CNT,
SUM(CASE WHEN MULTI_UNIT = 1 THEN 1 ELSE 0 END) AS MULTI,
SUM(AB300_IND) AS AB300,
SUM(AB10_IND) AS AB10,
SUM(AB20_IND) AS AB20,
SUM(AB30_IND) AS AB30,
FROM TABLE.VIEW.MAW
WHERE AB4_IND = 1
GROUP BY 1
UNION
SELECT
'AB5' AS Product,
COUNT(*) AS CNT,
SUM(CASE WHEN MULTI_UNIT = 1 THEN 1 ELSE 0 END) AS MULTI,
SUM(AB300_IND) AS AB300,
SUM(AB10_IND) AS AB10,
SUM(AB20_IND) AS AB20,
SUM(AB30_IND) AS AB30,
FROM TABLE.VIEW.MAW
WHERE AB5_IND = 1
GROUP BY 1
【问题讨论】:
-
请不要在您的问题中使用链接,因为没有任何安全意识的人会点击帖子中的随机链接。请使用可编辑文本的信息更新您的问题
-
嘿@NickW!谢谢你的评论。很有意义,我刚刚编辑了它!感恩节快乐!
标签: sql query-optimization snowflake-cloud-data-platform snowflake-schema