我正在尝试构建一个sql查询,它将为我提供前n个序列。为了简化,我们可以说,前n个表示第一天的最大count()(或者整个系列的count()会更好)。
例如:我有x个列,但只有两个要聚合的列:“color”和“date”。“颜色”栏有100种变体,但我只想要前10种。对于10种“颜色”中的每一种,我都要有所有日期的计数(*)
如果没有排名,我的查询将如下所示:
"select count(*), color, date from table group by color, date"
如果我输入“orderby+limit”,它只会选择最上面的部分,而不会选择最上面的系列。
你知道吗?
谢谢
聚苯乙烯;如果这改变了什么我用Hive/ Impala
ex输入:
color | date
red | 2016-01-01
red | 2016-01-01
red | 2016-01-01
red | 2016-01-01
black | 2016-01-01
black | 2016-01-01
black | 2016-01-01
red | 2016-01-02
red | 2016-01-02
black | 2016-01-02
black | 2016-01-02
black | 2016-01-02
blue | 2016-01-03
blue | 2016-01-03
blue | 2016-01-03
blue | 2016-01-03
black | 2016-01-03
red | 2016-01-03
在这种情况下,如果我只选择“前2个系列”,即使蓝色是第三天最大的,我只想选择黑色和红色,因为它们是最大的“整体”。蓝色应该被完全过滤掉
期望输出
color | date | count
red | 2016-01-01 | 4
black | 2016-01-01 | 3
red | 2016-01-02 | 2
black | 2016-01-02 | 3
red | 2016-01-03 | 1
black | 2016-01-03 | 1
1条答案
按热度按时间5t7ly7z51#
这可以通过使用cte和窗口功能来实现。
注意:用表名更新表。