Câu hỏi quen thuộc, nhưng với Vertica. Tôi muốn trả lại 5 hàng geo_country hàng đầu dựa trên tổng (imps) cho mỗi tag_id. Đây là truy vấn tôi đã bắt đầu:Trả về N hàng đầu cho mỗi nhóm (Vertica/vsql)
SELECT tag_id,
geo_country,
SUM(imps) AS imps,
RANK() OVER (PARTITION BY tag_id ORDER BY SUM(imps) DESC) AS rank
FROM table1
WHERE tag_id IN (2013150,1981153)
AND ymd > CURRENT_DATE - 3
GROUP BY 1,
2 LIMIT 10;
Điều này thực sự chỉ trả về các hàng từ thẻ đầu tiên trong mệnh đề WHERE (2013150). Tôi biết rằng các thẻ khác có tổng (imps) giá trị đủ cao mà nên bao gồm nó trong các kết quả.
Ngoài ra, làm cách nào để triển khai phần Top N? Tôi đã thử thêm một mệnh đề LIMIT trong hàm OVER, nhưng nó không giống như nó là một tham số được chấp nhận.
Đây là mẫu tôi sử dụng mọi lúc, nhưng không hài lòng vì lý do nào đó. Tôi đoán tôi muốn có một cái gì đó giống như HAVING cho các truy vấn phân tích? – kimbo305
Xem xét chấp nhận câu trả lời của bạn để hoàn thành câu hỏi. – Kermit
@ kimbo305 đó không phải là cách các truy vấn phân tích hoạt động cũng như không tuân thủ các tiêu chuẩn SQL. – Kermit