根据列值对数据库行进行分类

时间:2014-10-20 00:56:23

标签: mysql sql relational-database case categories

我有数据库表" tbl_data"有2列 - col1和col2数据,我需要为每一行计算(col1 / col2)。 使用此结果将每个数据行分类为以下类别:

Category1: top 10% 
Category2: 20-30%
Category3: 30-40% 
. . . 
. . .
Category10: 90-100%....

(这里我不知道col1 / col2的最大值,理想情况下是100%) 你能不能让我知道如何使用SQL查询来表达这一点?我正在使用MySQL

最后我想显示基于桶的记录(10%,10-20%,20-30%..等等) 我分组到。

2 个答案:

答案 0 :(得分:2)

这样的事情应该有效。

select 
  CASE 
    WHEN col1/col2 < 0.2 THEN '20%'
    WHEN col1/col2 < 0.4 THEN '40%'
    WHEN col1/col2 < 0.6 THEN '60%'
    WHEN col1/col2 < 0.8 THEN '80%'
    ELSE '100%'
  END as category
from tbl_data

问题在于,我不确定你的意思,因为你不知道col1 / col2的最大值。

SQL Fiddle

基于评论,这样的事情可能会起作用,其中最大值被标准化:

select 
  CASE 
    WHEN col1/col2 < max_value * 0.2 THEN '20%'
    WHEN col1/col2 < max_value * 0.4 THEN '40%'
    WHEN col1/col2 < max_value * 0.6 THEN '60%'
    WHEN col1/col2 < max_value * 0.8 THEN '80%'
    ELSE '100%'
  END as category
from tbl_data
  join (select max(col1/col2) as max_value
          from tbl_data) as max_val

SQL Fiddle for case number 2

答案 1 :(得分:0)

听起来你想把这个比例枚举成十分位数。也许这就是你想要的:

select d.*, 1 + floor(10*(rank - 1) / @r) as decile
from (select d.*, (@r := @r + 1) as rank
      from tbl_data d cross join
           (select @r := 0) vars
      order by col1 / col2
     ) d
相关问题