MySQL查询将数据分组到不同范围
我在这里找到了解决办法, 只要有所有范围的数据,它就可以正常工作。如果没有数据,我希望查询返回0 因此,如果我的表是:MySQL查询将数据分组到不同范围,mysql,Mysql,我在这里找到了解决办法, 只要有所有范围的数据,它就可以正常工作。如果没有数据,我希望查询返回0 因此,如果我的表是: item_name | price i1 | 2 i2 | 22 i3 | 4 i4 | 26 i5 | 44 i6 | 6 我希望输出为: range | number of item 0 - 10 | 3 11 - 20 | 0 21 - 30 | 2 31 - 40 |
item_name | price
i1 | 2
i2 | 22
i3 | 4
i4 | 26
i5 | 44
i6 | 6
我希望输出为:
range | number of item
0 - 10 | 3
11 - 20 | 0
21 - 30 | 2
31 - 40 | 0
41 - 50 | 1
下面的查询不会显示0个计数案例的结果
select
case when price >= 0 and price <= 10 then " 0 - 10"
when price > 10 and price <= 20 then " 10 - 20"
when price > 20 and price <= 30 then " 20 - 30"
when price > 30 and price <= 40 then " 30 - 40"
when price > 40 and price <= 50 then " 40 - 50"
else "over 50"
end PriceRange,
count(*) as TotalWithinRange
from
YourTable
group by 1
有人对此有解决方案吗?在范围内按总数分组,因此它将计算每个类别这可能不是最有效的答案,但您可以尝试对每个组使用单独的SUMCASE语句。例如:
SUM(CASE WHEN price >= 0 AND price <= 10 THEN 1 ELSE 0 END) AS "0-10"
等等。这应该打印总和为0的类别 您需要构建一个包含所有价格范围的内联表。然后根据查询对派生表执行左联接,以获得预期结果:
SELECT x.PriceRange, COALESCE(TotalWithinRange, 0) AS TotalWithinRange
FROM (
SELECT "0 - 10" AS PriceRange
UNION SELECT "10 - 20"
UNION SELECT "20 - 30"
UNION SELECT "30 - 40"
UNION SELECT "40 - 50"
UNION SELECT "over 50" ) x
LEFT JOIN (
SELECT
CASE when price >= 0 and price <= 10 then "0 - 10"
when price > 10 and price <= 20 then "10 - 20"
when price > 20 and price <= 30 then "20 - 30"
when price > 30 and price <= 40 then "30 - 40"
when price > 40 and price <= 50 then "40 - 50"
else "over 50"
END AS PriceRange,
COUNT(*) as TotalWithinRange
FROM YourTable
GROUP BY 1 ) y ON x.PriceRange = y.PriceRange
您有显示问题。基本查询很简单:选择castprice/10作为int,按castprice/10作为int从您的表组中计算*值,然后使用一些客户端代码将强制转换值格式化到您的范围中。我无法在TotalWithinRange上分组,导致SQL错误