我有数据库表" 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%..等等) 我分组到。
答案 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的最大值。
基于评论,这样的事情可能会起作用,其中最大值被标准化:
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
答案 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