2014-10-20 2 views
1

У меня есть таблица базы данных «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

Нечто подобное должно работать.

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

+0

Я имел в виду, что максимальная (col1/col2) не известна, и она должна быть вычислена в SQL => это как [(col1/col2)/макс (col1/col2)]> 0 и <0,1, то я классифицирую это на 10%. –

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 
+0

Но я получаю результат, поскольку все строки таблицы сгруппированы только в decile1. Не удалось получить decile2, decile3 и так далее ... –

Смежные вопросы