Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 基于列值对数据库行进行分类_Mysql_Sql_Relational Database_Case_Categories - Fatal编程技术网

Mysql 基于列值对数据库行进行分类

Mysql 基于列值对数据库行进行分类,mysql,sql,relational-database,case,categories,Mysql,Sql,Relational Database,Case,Categories,我有一个数据库表tbl_data,它有两列——col1和col2数据,其中我需要为每一行计算col1/col2。 使用此结果将每个数据行分类为以下类别: Category1: top 10% Category2: 20-30% Category3: 30-40% . . . . . . Category10: 90-100%.... 这里我不知道col1/col2的最大值,理想情况下是100% 您能告诉我如何使用SQL查询来表达这一点吗?我正在使用MySQL 最后,我想显示基于bucke

我有一个数据库表tbl_data,它有两列——col1和col2数据,其中我需要为每一行计算col1/col2。 使用此结果将每个数据行分类为以下类别:

Category1: top 10% 
Category2: 20-30%
Category3: 30-40% 
. . . 
. . .
Category10: 90-100%....
这里我不知道col1/col2的最大值,理想情况下是100% 您能告诉我如何使用SQL查询来表达这一点吗?我正在使用MySQL

最后,我想显示基于bucket 10%、10-20%、20-30%的记录。。等等
我分组去了

像这样的事情应该行得通

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的最大值

根据注释,类似的操作可能会起作用,其中最大值是标准化的:

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

听起来好像你想把这个比率计算成十分位数。也许这正是你想要的:

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

我的意思是maxcol1/col2是未知的,它必须在SQL=>中计算,就像[col1/col2/maxcol1/col2]>0一样,但我得到的结果是,所有表行都只按十进制1分组。无法得到十进制2、十进制3等等。。。