使用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:函数值意外参数(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
关于我在做什么错的任何想法,或者这是否是获取我所需信息的正确查询?
答案 0 :(得分:0)
如果我对您的理解正确,那么您希望按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
或MAX
来获得字母的第一个和最后一个。
在某些情况下,您可能想以一种更特定的方式来选择商品标题,例如时间戳最高的那一行。假设表中有一个名为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