[英]Select n distinct values from one column and all other data
我有一個表,每個用戶每天記錄一行數據,其中包含一個 user_id 列。 我想從 n 個隨機用戶中選擇所有日子,但表非常大,所以我想避免進行自聯接。
現在,我正在做:
SELECT
a.user_id, b.col1, b.col2, b.col3
FROM
(
SELECT DISTINCT
user_id
FROM
pipeline.user_daily
ORDER BY
RANDOM() LIMIT 100) a
LEFT JOIN
pipeline.user_daily b
ON
a.user_id = b.user_id
有沒有辦法用窗口函數或任何其他非自連接來做到這一點?
在一個不相關的說明中,上面的內表 a 實際上在 vertica 中不起作用,所以我使用
SELECT
user_id
FROM
pipeline.user_daily
GROUP BY
user_id
ORDER BY
RANDOM() LIMIT 100
關於為什么隨機選擇不同順序的任何想法在 Vertica 中不起作用?
我不確定這是否被認為是自聯接,但它應該由 SQL 服務器優化,首先運行SELECT DISTINCT user_id
查詢,然后運行外部查詢。
SELECT user_id, col1, col2, col3 FROM pipeline.user_daily
WHERE
user_id IN
(SELECT DISTINCT user_id
FROM
pipeline.user_daily
ORDER BY
RANDOM() LIMIT 100)
嘗試使用 WITH 子句。 我不熟悉 Vertica,但這在 Oracle 中有效。
WITH a AS (
SELECT DISTINCT
user_id
FROM
pipeline.user_daily
ORDER BY
RANDOM() LIMIT 100 )
SELECT
a.user_id, b.col1, b.col2, b.col3
FROM pipeline.user_daily b
JOIN a on a.user_id = b.user_id
您可以使用row_number()來區分。
SELECT
user_id, col1, col2, col3
FROM (
SELECT
user_id, col1, col2, col3, row_number() over (partition by user_id, col1, col2, col3 order by null) rn
FROM
pipeline.user_daily
) sub
where rn = 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.