[英]Group by two of three columns SQL
我覺得這應該很容易,但是我似乎無法弄清楚。
我有一個四列的表。 三欄包含類別的文本描述。 第四列計算的是前三列的串聯出現在原始表中的次數。
桌子看起來像這樣。
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 Counts
Auto Cars Sedan 20
Auto SUV Luxary 21
我嘗試使用Max()選擇最高的“計數”,但必須對TD13上非聚集組的所有值進行分組。 關於如何做到這一點的任何建議?
您可以將老式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的派生表的聯接,但所有人都應獲得類似的計划。
最有效的版本(並且最容易編寫)通常是Windowed Aggregate Function:
select *
from tab
qualify row_number()
over (partition by Vertical, Cat
order by Counts desc) = 1
所以像這樣的偽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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.