簡體   English   中英

從一列和所有其他數據中選擇 n 個不同的值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM