3

这个查询:

SELECT min( "x" )  as "From",
       max( "x" ) as "To",
       sum("quantity")
FROM (
SELECT t.*,
      ntile( 4 ) over (order by "x" ) as group_no
FROM table1 t)GROUP BY 
              group_no
              ORDER BY 1;

有了这个数据

x   quantity
1   9
2   43
3   21
4   26
6   14
7   38
8   14
9   20
10  20
11  30
12  32
13  37
14  27
15  22
16  34
17  9
18  4
19  24
20  42
21  21
22  16
23  34
24  9
25  49
26  21
27  20
28  28
29  6
30  3

有这个结果:

1   6   113
7   11  122
12  16  152
17  21  100
22  26  129
27  30  57

SQL总和(数量)分布更均匀,还有其他可能性吗?

我知道有很多算法,但我很确定必须有智能SQL(分析函数)解决方案,例如。

4

1 回答 1

1

尝试这样的事情:

    选择
      min(bx) 作为“从”,
      最大(bx)为“至”,
      总和(b.quantity)作为“总和”
    从
      (
        选择
          斧头,
          a.数量,
          ceil(sum(a.quantity)
            over (在无界的前一行和当前行之间按 ax asc 行排序) / a.avg_quantity_for_group) group_no
        from (select tx, t.quantity, ceil(sum(t.quantity) over () / 4) avg_quantity_for_group from table1 t) a
      ) b
    按 b.group_no 分组
    按“发件人”升序排列;

对于您的输入数据结果将是:

1 8 165
9 14 166
15 22 172
23 30 170
于 2017-08-03T10:22:15.023 回答