首页 > 解决方案 > SQLite:计算匹配多个条件的条目数的百分比

问题描述

我觉得我在这里遗漏了一些非常明显的东西。我已经阅读了大量的线程并用谷歌搜索了我的屁股,但我不知道如何让这段代码工作,尽管我已经接近了几次。

我正在处理一张有几列的桌子。我需要选择符合两个标准的项目并计算符合该标准的整体百分比并使用 printf 对百分比进行四舍五入(我不能使用 ROUND)。我还没有尝试使用 printf ,因为我什至无法计算百分比。

例如,一个名为 movies 的表:

------------------------------------
id     |     title     |     score
-----------------------------------
1      |   War Movie   |      51
2      |   Pony Movie  |     100
3      |   Big Wars    |      55
4      |   Bad Movie   |      12
5      |   Big Heist   |      90
6      |   Total War   |      19

我想拉出所有得分> 50且标题中有“战争”的电影。在这种情况下,它将返回 33.33(“战争电影”和“大战争”符合条件;2 / 6 = 33.33%)。

在我尝试过的所有事情中,我认为这是最接近的:

FROM movies
CROSS JOIN (SELECT SUM(title) AS s FROM movies) t
WHERE score > 50 AND title LIKE '%war%'
GROUP BY title

这有几个问题:

  1. COUNT(*) 在每列中返回 1(而不是 6 - 即表中所有记录的总数)
  2. 占总回报的百分比(空)

这也感觉很接近:

SELECT title,
        SUM(title) * 1.0 / Count(title) * 100 AS Percentage
        FROM movies
        WHERE score > 50 AND title LIKE '%war%'
        GROUP BY title

但这只是将百分比返回为 0。

我难住了!

标签: sqlsqlite

解决方案


我想拉出所有得分> 50且标题中有“战争”的电影。

如果我理解正确,您需要条件聚合:

select avg(case when score > 50 and title like '%war%' then 1.0 else 0 end) as ratio
from movies;

推荐阅读