雅典娜row_number函数与where或count结合使用

时间:2019-12-08 17:57:10

标签: sql group-by amazon-athena

这里有个新手,正在努力应付一些基本任务。

我有一张简单的桌子,上面放着许多不同颜色的产品。我想知道多少种产品的颜色超过三种。

我从以下内容开始:

SELECT product_colour, 
       product_id,
       row_number() over (partition by product_colour) AS row_num
FROM table
WHERE row_num > 3
ORDER BY product_id

由于SQL的外部/内部逻辑,上述方法不起作用,因此较早地对其进行了Google搜索,因此可能会产生误解。

我已经按照教程进行了尝试。

SELECT rn,
       product_colour,
       product_id,
FROM 
(
  SELECT row_number() over (partition by product_colour ORDER BY product_colour) AS rn,
         product_colour,
         product_id,
  FROM table
) AS t
HAVING COUNT(t.rn) > 3

无论尝试哪种语法“ stuff”的组合,我都希望能够克服此错误消息“'“ rn”'必须是聚合表达式或出现在GROUP BY子句中”。我根本做不到。

受第一响应者的启发,我设法找到了最近的响应者,但是,此查询不再返回任何错误消息,而只是返回一个空表。

SELECT product_colour,
       t.rn,
       product_id,
FROM 
(
  SELECT row_number() over (partition by product_colour) AS rn,
         product_colour,
         product_id
  FROM table
) AS t
GROUP BY product_colour, product_id, t.rn
HAVING COUNT(t.rn) > 3
ORDER BY product_colour, t.rn

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果您想要具有3种或更多颜色的产品列表,而无需窗口功能,则可以使用聚合:

select product_id
from mytable
group by product_id
having count(distinct product_colour) >= 3

如果您想知道多少个产品具有3种或更多的颜色,则可以添加另一个聚合级别:

select count(*)
from (
    select 1
    from mytable
    group by product_id
    having count(distinct product_colour) >= 3
) t

请注意:如果表中(product_id, product_colour)类型是唯一的,则不需要distinct