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

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 |

我在这里找到了解决办法,

只要有所有范围的数据,它就可以正常工作。如果没有数据,我希望查询返回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 |  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错误