php - MySQL 在范围之间进行分组

标签 php mysql

我有一个包含 2 个字段的评级表:RatingID、UserID、RateValue RateValue 可以是 2 位小数

我想要的是按 RateValue 和 Count Records 范围之间的结果进行分组,例如

RateValue 介于 0-1.5 之间应返回 1,1.6-2.5 将返回 2,2.6-3.5 将返回 3,3.6-4.5 将返回 4,4.6-5 将返回 5

我想在该范围之间进行分组并获得如下结果

OneStar 评级 - 2 双星评级 - 0 三星级评级 - 3 四星评级 - 1 五星级评级 - 6

我现在尝试的是这个,但不起作用

SELECT COUNT(RatingID) as TotalRecords, (IF(RateValue BETWEEN 0 AND 1.5,"OneStarRating",false) OR IF(RateValue BETWEEN 1.6 and 2.5,"TwoStarRating",false) OR IF(RateValue BETWEEN 2.6 and 3.5,"ThreeStarRating",false) OR IF(RateValue BETWEEN 3.6 and 4.5,"FourStarRating",false) OR IF(RateValue BETWEEN 4.6 and 5,"FiveStarRating",false)) as RateValue
FROM (`Ratings`)
GROUP BY RateValue

最佳答案

可能有一个联合查询的子查询来带回您感兴趣的范围:-

SELECT sub0.RateValue, COUNT(RatingID)
FROM Ratings
INNER JOIN
(
    SELECT 0 AS low_bound, 1.5 AS high_bound, "OneStarRating" AS RateValue
    UNION SELECT 1.6, 2.5, "TwoStarRating"
    UNION SELECT 2.6, 3.5, "ThreeStarRating"
    UNION SELECT 3.6, 4.5, "FourStarRating"
    UNION SELECT 4.6, 5, "FiveStarRating"
) sub0
ON Ratings.RateValue BETWEEN sub0.low_bound AND sub0.high_bound
GROUP BY sub0.RateValue

编辑 - 要在没有记录的情况下获得 0 计数:-

SELECT sub0.RateValue, COUNT(RatingID)
FROM
(
    SELECT 0 AS low_bound, 1.5 AS high_bound, "OneStarRating" AS RateValue
    UNION SELECT 1.6, 2.5, "TwoStarRating"
    UNION SELECT 2.6, 3.5, "ThreeStarRating"
    UNION SELECT 3.6, 4.5, "FourStarRating"
    UNION SELECT 4.6, 5, "FiveStarRating"
) sub0
LEFT OUTER JOIN Ratings
ON Ratings.RateValue BETWEEN sub0.low_bound AND sub0.high_bound
GROUP BY sub0.RateValue

关于php - MySQL 在范围之间进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32477658/

相关文章:

php - 替换 mysql_real_escape_string() :

php - 尝试使用 PHP 将用户输入保存到 MySQL 时出错

php - 如何通过 proc_open 后台进程并访问 STDIN?

php - 遍历索引数组

mysql - 我们可以将更新与加载查询一起使用吗?

MySQL查询股票交易到达情况

PHP组合数组键值(在同一数组中)以创建新的键值

php - SQL - 将表单插入数据库

c# - C# 中的 LocalReports 导致 Microsoft.Reporting.WinForms.LocalProcessingException

MYSQL 选择许多具有名称的列,如子查询中