Mysql 基于列值对数据库行进行分类
我有一个数据库表tbl_data,它有两列——col1和col2数据,其中我需要为每一行计算col1/col2。 使用此结果将每个数据行分类为以下类别: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
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等等。。。