这里有个新手,正在努力应付一些基本任务。
我有一张简单的桌子,上面放着许多不同颜色的产品。我想知道多少种产品的颜色超过三种。
我从以下内容开始:
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
有什么想法吗?
答案 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
。