我觉得这应该很容易,但我似乎无法弄明白。
我有一个包含四列的表格。三列有类别的文本描述。第四列计算前三列的串联在原始表中出现的次数。
表格看起来像这样。
Vertical Cat Sub-Cat Counts
Auto Cars Sports Cars 9
Auto Cars Sedan 20
Auto SUV Luxary 21
Auto SUV Mid-Range 8
目标是选择Vertical,Cat和Sub-Cat,以获得独特版本的垂直和猫的最高“数量”。
因此,查询将返回以下内容。
Vertical Cat Sub-Cat Counts
Auto Cars Sedan 20
Auto SUV Luxary 21
我尝试使用Max()来选择最高'计数',但我必须按照TD13上非聚合组的所有值进行分组。有关如何实现这一目标的任何建议吗?
答案 0 :(得分:3)
您可以将旧式SQL与相关子查询
一起使用select *
from tab as t1
where counts =
( select max(counts)
from tab as t2
where t1.Vertical = t2.Vertical
and t1,Cat = t2.Cat
)
或多列子查询或带有group by的派生表的连接,但所有应该得到类似的计划。
最有效的版本(也是最容易编写的)通常是一个窗口化聚合函数:
select *
from tab
qualify row_number()
over (partition by Vertical, Cat
order by Counts desc) = 1
答案 1 :(得分:0)
像这样的伪sql:
SELECT *
FROM <table>
INNER JOIN
(
SELECT Vertical, Cat, MAX(Counts)
FROM <table>
GROUP BY Vertical, Cat
) MY_AGGREGATE
ON MY_AGGREGATE.Vertical = <table>.Vertical
AND MY_AGGREGATE.Cat = <table>.Cat
AND MY_AGGREGATE.MAX(Counts) = <table>.Counts