Sql 理解其中的一切是很重要的。 这将使您能够使用更简单、更快的查询来运行非常复杂的查询。您的表中的已购买客户和未购买客户之间有什么区别?我想观察一下该产品在客户中的受欢迎程度。因此,购买的客户是任何采用该产品的客户,非购买的客户是任何不采用该产品的客户。例如,

Sql 理解其中的一切是很重要的。 这将使您能够使用更简单、更快的查询来运行非常复杂的查询。您的表中的已购买客户和未购买客户之间有什么区别?我想观察一下该产品在客户中的受欢迎程度。因此,购买的客户是任何采用该产品的客户,非购买的客户是任何不采用该产品的客户。例如,,sql,google-bigquery,Sql,Google Bigquery,理解其中的一切是很重要的。 这将使您能够使用更简单、更快的查询来运行非常复杂的查询。您的表中的已购买客户和未购买客户之间有什么区别?我想观察一下该产品在客户中的受欢迎程度。因此,购买的客户是任何采用该产品的客户,非购买的客户是任何不采用该产品的客户。例如,产品P01已由三个客户A01、A02和A04购买,而A03仍然不购买。您至少需要,这里所有客户的表。假设我假设所有客户都存在于这个事务表中。对于X,我认为选择L.PID作为PID,从SELECT PID中选择R.NUMCUST作为NUMCUST

理解其中的一切是很重要的。
这将使您能够使用更简单、更快的查询来运行非常复杂的查询。

您的表中的已购买客户和未购买客户之间有什么区别?我想观察一下该产品在客户中的受欢迎程度。因此,购买的客户是任何采用该产品的客户,非购买的客户是任何不采用该产品的客户。例如,产品P01已由三个客户A01、A02和A04购买,而A03仍然不购买。您至少需要,这里所有客户的表。假设我假设所有客户都存在于这个事务表中。对于X,我认为选择L.PID作为PID,从SELECT PID中选择R.NUMCUST作为NUMCUST,从MYTABLE GROUP BY PID中选择L LEFT JOIN SELECT COUNTINCT CUSID作为NUMCUST,从MYTABLE GROUP中选择PID R ON L.PID=R.PID应该返回已购买客户的数量。但我仍然不知道如何做到这一点。在您的表格中,购买的和未购买的客户有什么区别?我想观察一下该产品在客户中的受欢迎程度。因此,购买的客户是任何采用该产品的客户,非购买的客户是任何不采用该产品的客户。例如,产品P01已由三个客户A01、A02和A04购买,而A03仍然不购买。您至少需要,这里所有客户的表。假设我假设所有客户都存在于这个事务表中。对于X,我认为选择L.PID作为PID,从SELECT PID中选择R.NUMCUST作为NUMCUST,从MYTABLE GROUP BY PID中选择L LEFT JOIN SELECT COUNTINCT CUSID作为NUMCUST,从MYTABLE GROUP中选择PID R ON L.PID=R.PID应该返回已购买客户的数量。但是,如果我的答案对你有帮助,我仍然无法弄清楚如何得到它。我投了你的票。非常感谢。如果我的回答对你有帮助的话,也请考虑投票:OIT工作得很好。我投了你的票。非常感谢你。
CUSID   PID TID YYYYMMDD
A01     P01 001 2017-01-01
A02     P01 002 2017-02-25
A02     P02 002 2017-02-25
A03     P02 003 2017-03-01
A03     P02 004 2017-03-05
A03     P02 004 2017-03-05
A04     P01 005 2017-03-10
A04     P03 005 2017-03-10
A04     P03 006 2017-03-11
A04     P03 007 2017-03-15
CUSID  PID  TID YYYYMMDD        X               Y
A01    P01  001 2017-01-01   3/4 = 0.75  AVG(0,0,0) = N/A (P01 does not have re-purchasing by A01, A02, and A04)
A02    P01  002 2017-02-25   3/4 = 0.50  AVG(0,0,0) = N/A (P01 is not re-purchased by A01, A02, and A04)
A02    P02  002 2017-02-25   2/4 = 0.50  AVG(0,4) = 4 (P02 is not re-purchased by A02 but it is re-purchased by A03 for 4 days.  Note: duplicated product in the same TID is excluded, e.g. TID = 004)
A03    P02  003 2017-03-01   2/4 = 0.50  AVG(0,4) = 4 (P02 is not re-purchased by A02 but it is re-purchased by A03 for 4 days.  Note: duplicated product in the same TID is excluded, e.g. TID = 004)
A03    P02  004 2017-03-05   2/4 = 0.50  AVG(0,4) = 4 (P02 is not re-purchased by A02 but it is re-purchased by A03 for 4 days.  Note: duplicated product in the same TID is excluded, e.g. TID = 004)
A03    P02  004 2017-03-05   2/4 = 0.50  AVG(0,4) = 4 (P02 is not re-purchased by A02 but it is re-purchased by A03 for 4 days.  Note: duplicated product in the same TID is excluded, e.g. TID = 004)
A04    P01  005 2017-03-10   3/4 = 0.75  AVG(0,0,0) = N/A (P01 is not re-purchased by A01, A02, and A04)
A04    P03  005 2017-03-10   1/4 = 0.25  AVG(1,4) = 2.5 (P03 is repurchased by A04 for 1 and 4 day gaps)
A04    P03  006 2017-03-11   1/4 = 0.25  AVG(1,4) = 2.5 (P03 is repurchased by A04 for 1 and 4 day gaps)
A04    P03  007 2017-03-15   1/4 = 0.25  AVG(1,4) = 2.5 (P03 is repurchased by A04 for 1 and 4 day gaps)
SELECT
  * EXCEPT(lead_date),
  AVG(CASE WHEN lead_date != date THEN DATE_DIFF(parse_DATE("%Y-%m-%d", lead_date), parse_DATE("%Y-%m-%d", date), DAY) END) OVER(PARTITION BY PID) Y
FROM(
  SELECT
    *,
    COUNT(DISTINCT cusid) OVER(PARTITION BY PID) / COUNT(DISTINCT cusid) OVER() X,
    LEAD(date) OVER(PARTITION BY PID, cusid ORDER BY TID) lead_date
  FROM
    data )
with data as(
select 'A01' as cusid, 'P01' as PID, 1 as TID, '2017-01-01' as date union all
select 'A02', 'P01', 2, '2017-02-25' UNION ALL
SELECT 'A02', 'P02', 2, '2017-02-25' UNION ALL
SELECT 'A03', 'P02', 3, '2017-03-01' UNION ALL
SELECT 'A03', 'P02', 4, '2017-03-05' UNION ALL
SELECT 'A03', 'P02', 4, '2017-03-05' UNION ALL
SELECT 'A04', 'P01', 5, '2017-03-10' UNION ALL
SELECT 'A04', 'P03', 5, '2017-03-10' UNION ALL
SELECT 'A04', 'P03', 6, '2017-03-11' UNION ALL
SELECT 'A04', 'P03', 7, '2017-03-15'
)