SQL server:根据Value对它们进行分组

时间:2018-06-04 11:31:00

标签: sql sql-server

我有以下方式的表格:

ID , sales
1, 1
2, 1
3, 2
4, 2
5, 3
6, 2
7, 3
8, 5
9, 9
10, 3
11, 2

我想要基本实现的是我想根据他们的销售将ID分为3组:高,中,低

O / P

ID, sales, group
1, 1, low
2, 1, low
3, 2, low
4, 2, low
5, 3, low
6, 2, low
7, 3, low
8, 5, med
9, 9, high
10, 3, low
11, 2, low

3 个答案:

答案 0 :(得分:1)

选择sales的最大值并将其除以3.在CASE中使用该值来对销售数字进行排名。

SELECT id,
       sales,
       CASE
         WHEN sales <= convert(decimal, (SELECT max(sales)
                                                FROM elbat))
                       / 3
           THEN 'low'
         WHEN sales <= convert(decimal, (SELECT max(sales)
                                                FROM elbat))
                       / 3 * 2
           THEN 'med'
         ELSE 
           'high'
       END group
       FROM elbat;

只是为了证明这个想法。您可能想要对运算符进行调整(例如<而不是<=)和计算,例如将ceil()应用于结果等。

答案 1 :(得分:0)

您可以使用case表达式:

select (case when sales < 4 then 'low'
             when sales < 7 then 'med'
             else 'high'
        end) as sales_group

答案 2 :(得分:0)

您可以使用group by子句:

select t1.sales_group, count(*) as counts, sum(t.sales) as total_sales_group
from table t
cross apply ( values (case when sales < 4 then 'low'
                           when sales < 7 then 'med'
                           else 'high'
                       end) 
            ) t1 (sales_group)
group by t1.sales_group;