将不同项分组到存储桶中的SQL查询

sam*_*l_C 30 sql postgresql

我正在尝试编写一个查询,该查询返回其价格属于certrain存储桶的商品数量:

例如,如果我的表是:

item_name | price
i1        | 2
i2        | 12
i3        | 4
i4        | 16
i5        | 6
Run Code Online (Sandbox Code Playgroud)

输出:

range   | number of item
0 - 10  |  3
10 - 20 |  2
Run Code Online (Sandbox Code Playgroud)

到目前为止我这样做的方式是

SELECT count(*)
FROM my_table
Where price >=0
and price <10
Run Code Online (Sandbox Code Playgroud)

然后

SELECT count(*)
FROM my_table
Where price >=10
and price <20
Run Code Online (Sandbox Code Playgroud)

然后将每次粘贴我的结果复制到excel中.

是否有自动方法在SQL查询中执行此操作?

DRa*_*app 42

根据Kerrek描述的扩展选项,您可以根据案例/何时进行分组

select
      case when price >= 0 and price <= 10    then '  0 - 10'
           when price > 10 and price <= 50   then ' 10+ - 50'
           when price > 50 and price <= 100  then ' 50+ - 100'
           else 'over 100'
      end PriceRange,
      count(*) as TotalWithinRange
   from
      YourTable
   group by 1
Run Code Online (Sandbox Code Playgroud)

这里,"group by 1"表示select语句中的序数列...在这种情况下,case/when为TotalWithinRange.


Ker*_* SB 21

您可以尝试按10单位价格分组:

SELECT COUNT(*) AS tally,
       FLOOR(price/10) AS prange,
       CONCAT(10*FLOOR(price/10), "-", 10*FLOOR(price/10)+9) AS rstr
FROM my_table
GROUP BY prange;
Run Code Online (Sandbox Code Playgroud)

  • 另外,别名`prange`并在`GROUP BY`中按名称提及它在某些RDBMS中不可用 (3认同)