【问题标题】:COUNT(DISTINCT()) OVER (PARTITION BY) in Presto (Athena)?Presto(Athena)中的COUNT(DISTINCT())超过(PARTITION BY)?
【发布时间】:2020-05-02 01:05:39
【问题描述】:

我在 Athena (Presto) DB 中有下表,我们称之为 table1(为这个问题简化):

  | serverdate | colA | colB | colC | hash
  |-------------------------------------------
0 | 2019-12-01 |    1 | OK   | 10   | hash1
1 | 2019-12-02 |    2 | OK   | 10   | hash2
2 | 2019-12-02 |    3 | NOK  | 100  | hash3
3 | 2019-12-01 |    3 | OK   | 0    | hash4
4 | 2019-12-03 |    6 | OK   | 1    | hash5
5 | 2019-12-05 |    8 | NOK  | 0    | hash6
6 | 2019-12-06 |    8 | NOK  | 0    | hash6

以下查询用于计算表中有多少不同的“哈希”:

SELECT 'users' AS Type, round(count(DISTINCT hash)) AS uu
FROM table1

这稍后用作子查询,但对于这个问题并不重要。在这个例子中,结果应该是:

  |  type | uu
  |-------------
0 | users | 6

我想要什么:我想做同样的计数,但按 colA 对结果进行分组。我的结果应该是这样的:

  | colA | counthash
  |------------------
0 |    1 | 1
1 |    2 | 1
2 |    3 | 2
3 |    6 | 1
4 |    8 | 1

我认为使用 COUNT(DISTINCT(hash)) OVER (PARTITION BY colA),但据我所知,在 Presto 中不允许将 COUNT(DISTINCT()) 作为窗口函数。

关于如何做到这一点的任何想法?谢谢。

【问题讨论】:

  • 为什么要使用ROUND()COUNT()

标签: sql presto amazon-athena


【解决方案1】:

你不应该为此需要一个窗口函数。我对 presto 本身不太熟悉,但是以下工作有效吗?:

SELECT colA, round(count(DISTINCT hash)) AS uu
FROM table1
GROUP BY colA;

【讨论】:

  • 我会取消这一轮,因为 count 已经返回一个整数。
猜你喜欢
  • 2021-12-18
  • 2019-10-22
  • 2020-11-16
  • 2021-05-06
  • 1970-01-01
  • 2013-12-20
  • 2021-12-15
  • 2021-12-28
  • 1970-01-01
相关资源
最近更新 更多