只有某些变量的 COUNT 的总和
SUM of COUNT with only certain variables
我有以下返回结果的查询,但我需要从 filled_orders 列中排除某些变量。
整个查询:
SELECT
order_date,
p_category,
issue_group,
srt_level,
order_count,
filled_orders,
total_orders,
round(100 *(order_count / total_orders), 1) AS monthly_metric
FROM
(
SELECT
order_date,
p_category,
issue_group,
srt_level,
order_count,
CASE
WHEN srt_level = '80' THEN order_count
WHEN srt_level = '100' THEN SUM(order_count) OVER(
PARTITION BY order_date, issue_group, p_category
)
END AS filled_orders,
total_orders
FROM
(
SELECT
order_date,
p_category,
issue_group,
srt_level,
order_count,
SUM(order_count) OVER(
PARTITION BY order_date, issue_group, p_category
) AS total_orders
FROM
(
SELECT
order_date,
p_category,
CASE
WHEN ( issue_grp = 1 ) THEN '1'
ELSE '2/3 '
END AS issue_group,
srt AS srt_level,
COUNT(*) AS order_count
FROM
database.tcon_mv
WHERE
order_date IN (
'201803'
)
GROUP BY
p_category,
CASE
WHEN ( issue_grp = 1 ) THEN '1'
ELSE '2/3 '
END,
srt,
order_date
)
)
)
ORDER BY
order_date,
p_category,
issue_group
部分给我 "issues":
... SELECT
order_date,
p_category,
issue_group,
srt_level,
order_count,
CASE
WHEN srt_level = '80' THEN order_count
WHEN srt_level = '100' THEN SUM(order_count) OVER(
PARTITION BY order_date, issue_group, p_category
)
END AS filled_orders,
total_orders
FROM ....
srt_level 是一个 varchar 列,它的结果只有 3 个选项(80、100 和 Late)。当 srt_level = '100' 时,我需要的计数只包括 80 行和 100 行的总和。
完整查询返回的视图,预期结果用红色表示。
我假设您只想对 order_count
个值求和,其中 srt_level
不是 Late
。然后说是在你的 sum
:
SELECT
order_date,
p_category,
issue_group,
srt_level,
order_count,
CASE
WHEN srt_level = '80' THEN order_count
WHEN srt_level = '100' THEN
SUM(CASE WHEN srt_level != 'Late' THEN order_count END) OVER(
PARTITION BY order_date, issue_group, p_category
)
END AS filled_orders,
total_orders
FROM ....
我有以下返回结果的查询,但我需要从 filled_orders 列中排除某些变量。
整个查询:
SELECT
order_date,
p_category,
issue_group,
srt_level,
order_count,
filled_orders,
total_orders,
round(100 *(order_count / total_orders), 1) AS monthly_metric
FROM
(
SELECT
order_date,
p_category,
issue_group,
srt_level,
order_count,
CASE
WHEN srt_level = '80' THEN order_count
WHEN srt_level = '100' THEN SUM(order_count) OVER(
PARTITION BY order_date, issue_group, p_category
)
END AS filled_orders,
total_orders
FROM
(
SELECT
order_date,
p_category,
issue_group,
srt_level,
order_count,
SUM(order_count) OVER(
PARTITION BY order_date, issue_group, p_category
) AS total_orders
FROM
(
SELECT
order_date,
p_category,
CASE
WHEN ( issue_grp = 1 ) THEN '1'
ELSE '2/3 '
END AS issue_group,
srt AS srt_level,
COUNT(*) AS order_count
FROM
database.tcon_mv
WHERE
order_date IN (
'201803'
)
GROUP BY
p_category,
CASE
WHEN ( issue_grp = 1 ) THEN '1'
ELSE '2/3 '
END,
srt,
order_date
)
)
)
ORDER BY
order_date,
p_category,
issue_group
部分给我 "issues":
... SELECT
order_date,
p_category,
issue_group,
srt_level,
order_count,
CASE
WHEN srt_level = '80' THEN order_count
WHEN srt_level = '100' THEN SUM(order_count) OVER(
PARTITION BY order_date, issue_group, p_category
)
END AS filled_orders,
total_orders
FROM ....
srt_level 是一个 varchar 列,它的结果只有 3 个选项(80、100 和 Late)。当 srt_level = '100' 时,我需要的计数只包括 80 行和 100 行的总和。
完整查询返回的视图,预期结果用红色表示。
我假设您只想对 order_count
个值求和,其中 srt_level
不是 Late
。然后说是在你的 sum
:
SELECT
order_date,
p_category,
issue_group,
srt_level,
order_count,
CASE
WHEN srt_level = '80' THEN order_count
WHEN srt_level = '100' THEN
SUM(CASE WHEN srt_level != 'Late' THEN order_count END) OVER(
PARTITION BY order_date, issue_group, p_category
)
END AS filled_orders,
total_orders
FROM ....