我正在编写这个查询来计算。
SELECT
Date,
SUM(CASE WHEN (Terms="Sandwich") THEN Stars ELSE 0 END) / SUM(CASE WHEN (Terms="Sandwich") THEN 1 ELSE 0 END) AS Sandwich,
SUM(CASE WHEN (Terms="Chicken") THEN Stars ELSE 0 END) / SUM(CASE WHEN (Terms="Chicken") THEN 1 ELSE 0 END) AS Chicken,
SUM(CASE WHEN (Terms="Meat") THEN Stars ELSE 0 END) / SUM(CASE WHEN (Terms="Meat") THEN 1 ELSE 0 END) AS Meat,
SUM(CASE WHEN (Terms="Others") THEN Stars ELSE 0 END) / SUM(CASE WHEN (Terms="Others") THEN 1 ELSE 0 END) AS Others
FROM __table__
GROUP BY Date
原始数据是这样的。
这是查询的结果。
/ 用于 int 除法,所以为什么结果是浮点数。第二个问题是有时项的计数和总和为 0,因此 0/0 未定义。我想用 0 填充这些单元格。请更新查询。
答案 0 :(得分:1)
也许你可以在这里使用 AVG
:
SELECT
Date,
AVG(CASE WHEN Terms = 'Sandwich' THEN Stars END) AS Sandwich,
AVG(CASE WHEN Terms = 'Chicken' THEN Stars END) AS Chicken,
AVG(CASE WHEN Terms = 'Meat' THEN Stars END) AS Meat,
AVG(CASE WHEN Terms = 'Others' THEN Stars END) AS Others
FROM __table__
GROUP BY
Date;
答案 1 :(得分:0)
您可以使用条件聚合和 COALESCE()
来实现,这样您就可以得到 0
而不是 NULL
:
SELECT Date,
COALESCE(AVG(CASE WHEN Terms = 'Sandwich' THEN Stars END), 0) Sandwich,
COALESCE(AVG(CASE WHEN Terms = 'Chicken' THEN Stars END), 0) Chicken,
COALESCE(AVG(CASE WHEN Terms = 'Meat' THEN Stars END), 0) Meat,
COALESCE(AVG(CASE WHEN Terms = 'Others' THEN Stars END), 0) Others
FROM __table__
GROUP BY Date;
AVG()
返回一个浮点数。
如果您希望结果为整数,您可以使用:
CAST(COALESCE(AVG(CASE WHEN Terms = 'Sandwich' THEN Stars END), 0) AS INTEGER)