SQLite 填充空单元格

时间:2021-01-08 06:14:13

标签: sql sqlite

我正在编写这个查询来计算。

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

原始数据是这样的。

enter image description here

这是查询的结果。

enter image description here

/ 用于 int 除法,所以为什么结果是浮点数。第二个问题是有时项的计数和总和为 0,因此 0/0 未定义。我想用 0 填充这些单元格。请更新查询。

2 个答案:

答案 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)
相关问题