amazon-athena - 在多种产品中获得唯一客户数量的最佳方式
问题描述
使用 AWS Athena 我正在尝试编写一个查询来计算每个产品订购的唯一客户的数量。
如果客户订购了 5 次产品,我只希望他们将指定产品计为 1。虽然如果他们订购了 3 种具有不同 SKU 代码的其他产品,我希望他们被计算在内。问题是我们的产品标题随着时间的推移发生了变化,当我运行以下查询时,由于产品标题的变化,我得到了产品标题的结果,其中多次列出了 sku 代码,但希望通过 sku_code 获得唯一客户数。
SELECT product_title, product_code, COUNT(DISTINCT customer_reference_id)
FROM "business_usage"."daily_business_usage_by_instance_type"
GROUP BY product_title, product_code
ORDER BY Product_code
这是我试图为购买的每个 sku 的客户获取不同计数但获得函数计数的 Syntax_error:Unexpected parameters (varchar, varchar) 的查询。预期:count() , count(T) T 为第一行
SELECT product_name, COUNT(DISTINCT sku_code, customer_id)
FROM "Data"."Orders"
GROUP BY product_name, sku_code
ORDER BY sku_code
关于我做错了什么的任何想法,或者这是否是获取我需要的信息的正确查询?
解决方案
如果我理解正确,您想要按 SKU 的唯一客户数,但您还想要检索产品标题,它随着时间的推移而变化,虽然与 SKU 相关并没有一对一的关系。
实现此目的的一种方法是按 SKU 分组并使用ARBITRARY
聚合函数从组中选择一个产品标题:
SELECT
ARBITRARY(product_title) AS product_title,
product_code,
COUNT(DISTINCT customer_reference_id)
FROM "business_usage"."daily_business_usage_by_instance_type"
GROUP BY product_code
ORDER BY product_code
顾名思义,ARBITRARY
会给你一个值,但它没有定义哪个,它可能因运行而异。您还可以使用MIN
orMAX
来获取按字母顺序排列的第一个和最后一个。
您可能希望以更具体的方式选择产品标题,例如时间戳最高的行中的标题。假设您的表有一个名为的列,order_date
您可以使用该MAX_BY
函数从组中的最新行中选择产品标题:
SELECT
MAX_BY(product_title, order_date) AS product_title,
product_code,
COUNT(DISTINCT customer_reference_id)
FROM "business_usage"."daily_business_usage_by_instance_type"
GROUP BY product_code
ORDER BY product_code
推荐阅读
- javascript - 读取具有不同域 BE/FE 的 cookie
- python - tensorflow - 如何使用 16 位精度浮点数
- python - 如何使用 scapy 更改信标帧数据包的 SSID?
- arrays - 使用 qsort 对结构数组进行排序
- r - R中逻辑回归的交叉验证函数中成本函数的参数
- python - 如何进行新型惰性格式化 python 日志记录
- pyomo - 为 nlp 求解器使用 ipopt 时为 mintpy 设置最大迭代
- javascript - 材质 UI 评级组件未显示正确的值
- html - CSS border-top 从上到下渐变
- node.js - execSync 和 ffmpeg 执行差距