gpt4 book ai didi

MySQL查询将数据分组到不同的范围

转载 作者:可可西里 更新时间:2023-11-01 08:45:33 26 4
gpt4 key购买 nike

我在这里找到了解决方案, sql query that groups different items into buckets

只要所有范围都有数据,它就能很好地工作。如果没有数据,我希望查询返回 0。

所以如果我的 table 是:

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

有人对此有解决方案吗?

最佳答案

您需要构建一个包含所有价格范围的内联表。然后根据您的查询对派生表执行 LEFT JOIN 以获得预期结果:

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

SQL Fiddle Demo

关于MySQL查询将数据分组到不同的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30335203/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com