sql - 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
这有几个问题:
- COUNT(*) 在每列中返回 1(而不是 6 - 即表中所有记录的总数)
- 占总回报的百分比(空)
这也感觉很接近:
SELECT title,
SUM(title) * 1.0 / Count(title) * 100 AS Percentage
FROM movies
WHERE score > 50 AND title LIKE '%war%'
GROUP BY title
但这只是将百分比返回为 0。
我难住了!
解决方案
我想拉出所有得分> 50且标题中有“战争”的电影。
如果我理解正确,您需要条件聚合:
select avg(case when score > 50 and title like '%war%' then 1.0 else 0 end) as ratio
from movies;
推荐阅读
- ruby-on-rails - `max_locks_per_transaction` 可以增加到非常大的数量吗?
- javascript - Vue 组件/元素在方法工作时创建
- javascript - 如何使用数组移动方法更改数组中的位置?
- html - 如何设置Angular Material的样式选择下拉覆盖
- symfony - 生成 URL 时如何不转义路由参数?
- c# - 模型未绑定查询参数.Net Core 3.0 HTTP GET中的所有属性
- powershell - Exchange 2016 的未读电子邮件
- wordpress - 导出 woocommerce 客户电子邮件
- ruby-on-rails - Rails 授权 CanCanCan
- postgresql - 在 Gitlab CI 中部署 helm 图表时如何修复节点主机名过长