来自有条件和无条件列的 SQL 查询分组的比率或百分比
Posted
技术标签:
【中文标题】来自有条件和无条件列的 SQL 查询分组的比率或百分比【英文标题】:Ratio or Percentage from group by SQL query from column with condition and without condition 【发布时间】:2016-06-25 22:30:59 【问题描述】:我在使用 SQL 查询时遇到了一些问题。从表中我们称其为报告:
我想按名称列对所有报告进行分组。
然后,对于这些名称组中的每一个,我想转到评级列并计算评级为 15 或更少的次数。假设其中一个名为 BOBBO 的组发生了 10 次。
我还想知道提交评分的次数(与每个名称组的记录总数相同)。因此,使用名称组 BOBBO 假设他有 20 个评分。
因此,在条件下,BOBBO 组 50% 的时间评分为 15 或更低。
我已经看过这些帖子——我仍然无法破解这个问题。
using-count-and-return-percentage-against-sum-of-records
getting-two-counts-and-then-dividing-them
getting-a-percentage-from-mysql-with-a-group-by-condition-and-precision
divide-two-counts-from-one-select
读完之后我尝试了这样的查询:
ActiveRecord::Base.connection.execute
("SELECT COUNT(*) Matched,
(select COUNT(rating) from reports group by name) Total,
CAST(COUNT(*) AS FLOAT)/CAST((SELECT COUNT(*) FROM reports group by name) AS FLOAT)*100 Percentage from reports
where rating <= 15 order by Percentage")
ActiveRecord::Base.connection.execute
("select name, sum(rating) / count(rating) as bad_rating
from reports group by name having bad_rating <= 15")
任何帮助将不胜感激!
【问题讨论】:
请指定表结构和您期望的输出 【参考方案1】:考虑差评级除以完整计数的条件聚合:
SELECT [name],
SUM(CASE WHEN [rating] <= 15 THEN 1 ELSE 0 END) / Count(*) AS bad_rating
FROM Reports
GROUP BY [name]
或@CL。指出一个较短的条件聚合(逻辑表达式求和):
SELECT [name],
SUM([rating] <= 15) / Count(*) AS bad_rating
FROM Reports
GROUP BY [name]
【讨论】:
sum(rating < 15)
更短。以上是关于来自有条件和无条件列的 SQL 查询分组的比率或百分比的主要内容,如果未能解决你的问题,请参考以下文章