-1

基本上,我需要创建一个表格来显示一周中每天的平均用户数,如果数字与平均值有 20% 的正偏差或负偏差,我需要它说“正异常值”或“负异常值” . 我目前已经计算了平均用户数,但我不知道如何编写 case 语句来显示我需要从数据中得出什么。这是我到目前为止所拥有的:

SELECT
  EXTRACT(DAYOFWEEK FROM date) AS dayOfWeek,
  AVG(users) AS average_users,
FROM
(
  SELECT
    PARSE_DATE('%Y%m%d', date) AS date,
    COUNT(DISTINCT(fullVisitorId)) AS users
  FROM `table`
  WHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE ('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 14 DAY))
    AND FORMAT_DATE ('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY))
  GROUP BY date
)
GROUP BY dayOfWeek
ORDER BY dayOfWeek ASC
4

1 回答 1

0

将此代码放在 CTE 中,例如,

with cte as (SELECT
  EXTRACT(DAYOFWEEK FROM date) AS dayOfWeek,
  AVG(users) AS average_users,
FROM
(
  SELECT
    PARSE_DATE('%Y%m%d', date) AS date,
    COUNT(DISTINCT(fullVisitorId)) AS users
  FROM `table`
  WHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE ('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 14 DAY))
    AND FORMAT_DATE ('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY))
  GROUP BY date
)
GROUP BY dayOfWeek
ORDER BY dayOfWeek ASC)

select dayOfWeek,average_users,
case when average_users > 20 then "positive'
else 'negative' end as outlier
 from cte;
于 2020-10-20T09:37:22.133 回答