Return 在单独的列中定义的唯一值的数量都满足相同的 'Where' 标准

Return defined number of unique values in separate columns all meeting same 'Where' Criteria

我们根据表中的唯一值输入覆盖值(我们有两列,每笔交易都有唯一值,因此可能是也可能不是主键)。

有时我们必须根据同一组条件输入多个覆盖,因此如果能够在一个查询中提取多个唯一值,并且在我们的系统抛出的 where 子句中都满足相同的条件,那就太好了如果相同的唯一 ID 用于多个覆盖,则会发出警告。

假设我们有一些客户在三个月内欠费,我们需要为每个月拆分帐户的三位销售人员中的每一位输入佣金覆盖:

我已经尝试了以下代码,但每一列都返回了相同的值:

select month, customer, product, sum(sales),
any_value(unique_id)unique_id1,
any_value(unique_id)unique_id2,
any_value(unique_id)unique_id3
from table 
where customer in (j,k,l) and product = m and year = o
group by 1,2,3;

这将为每个月和每个客户提供一行,但 unique_id1、unique_id2 和 unique_id3 中的值在每一行中都是相同的。

我能够使用:

select month, customer, product, sum(sales),
string_agg(unique_id, "," LIMIT 3)
from table 
where customer in (j,k,l) and product = m and year = o
group by 1,2,3;

并在电子表格中拆分 unique_ids,但我觉得必须有更好的方法来直接在 SQL 中完成此操作。

我想我可以使用子查询和基于第 1、2、3 行的 select 列,但我试图消除在子查询。

Beow 适用于 BigQuery 标准 SQL

我认为你的第二个查询足够接近下面的内容

#standardSQL
SELECT month, customer, product, sales,
  arr[OFFSET(0)] unique_id1,
  arr[SAFE_OFFSET(1)] unique_id2,
  arr[SAFE_OFFSET(2)] unique_id3
FROM (
  SELECT month, customer, product, SUM(sales) sales,
    ARRAY_AGG(unique_id ORDER BY month DESC LIMIT 3) arr
  FROM `project.dataset.table`
  WHERE customer IN ('j','k','l') AND product = 'm' AND year = 2019
  GROUP BY month, customer, product
)