每个小组的MySQL前N名排名,基于最新小组的行

时间:2019-03-18 03:32:42

标签: mysql sum aggregate top-n

对于每组TS,随机存在的行具有不同的Name,而行的数量为Count。我想执行以下操作:

  1. 通过Count获取名称顺序为NAME的最新一组TIMESTAMP。对于最新组中的3行以上,其余的总和为Count,并重命名为“其他”。
  2. 对于每个TIMESTAMP组,在步骤1中找到具有NAME的行。
  3. 如果未找到,则将特定组中的对的Count填充为0。

看一下插图:

TS         | Name     | Count
=============================
1552286160 | Apple    | 7
1552286160 | Orange   | 8
1552286160 | Grape    | 8
1552286160 | Pear     | 9
1552286160 | Kiwi     | 10
1552286160 | Berry    | 3
1552286160 | Carrot   | 2

1552286100 | Apple    | 10
1552286100 | Orange   | 12
1552286100 | Grape    | 14
1552286100 | Pear     | 16
1552286100 | Kiwi     | 9

1552286040 | Apple    | 4

1552285980 | Peach    | 8

对于这个数据集,我希望拥有以下内容:

TS         | Name     | Count
=============================
1552286160 | Kiwi     | 10
1552286160 | Pear     | 9
1552286160 | Grape    | 8
1552286160 | Other    | 8 + 7 + 3 + 2

1552286100 | Kiwi     | 9
1552286100 | Pear     | 16
1552286100 | Grape    | 14
1552286100 | Other    | 10 + 9

1552286040 | Kiwi     | 0
1552286040 | Pear     | 0
1552286040 | Grape    | 0
1552286040 | Other    | 4

1552286040 | Kiwi     | 0
1552286040 | Pear     | 0
1552286040 | Grape    | 0
1552286040 | Other    | 8

这实际上是来自MySQL top-N ranking and sum the rest of same group的扩展解决方案,但是,该解决方案并未将每个TS组与最新TS组(在本例中为{{1 }}。

我准备的SQL Fiddle位于此处:http://sqlfiddle.com/#!9/4e13004/1

如果有任何想法,谢谢。

0 个答案:

没有答案