簡體   English   中英

GROUP BY 中的列太多

[英]Too many columns in GROUP BY

我正在嘗試匯總一些數據,但遇到了問題。 這是我的查詢(使用 3 個表):

SELECT
            ufc.counter_id,
            gcrvf.goal_id,
            gcrvf.date_of_visit,
            ufc.utm_campaign,
            ufc.utm_source,
            ufc.utm_medium,
            ufc.utm_content,
            ufc.utm_term,
            ufc.original_join_id,
            max(gcrvf.last_update_time) AS last_update_time,
            sum(gcrvf.conversions) AS conversions, 
            c.name AS counter_name,
            c.owner_login AS owner_login,
            c.status AS counter_status,
            concat(g.goal_source,CAST('Goal','text')) AS metric_type,
            multiIf(g.is_retargeting = 0,'non-retargeting',g.is_retargeting = 1,'retargeting',NULL) AS metric_key,
            concat(g.name,' (',CAST(gcrvf.goal_id,'String'),')') AS metric_name
        FROM connectors_yandex_metrika.goal_conversions_report_v_final AS gcrvf
        INNER JOIN connectors_yandex_metrika.utm_for_collect AS ufc ON gcrvf.counter_id = ufc.counter_id
        LEFT JOIN connectors_yandex_metrika.counter AS c ON gcrvf.counter_id = c.id
        LEFT JOIN connectors_yandex_metrika.goal AS g ON gcrvf.goal_id = g.id
        WHERE 
            ((gcrvf.utm_campaign = ufc.utm_campaign) OR (ufc.utm_campaign IS NULL)) 
            AND ((gcrvf.utm_source = ufc.utm_source) OR (ufc.utm_source IS NULL)) 
            AND ((gcrvf.utm_medium = ufc.utm_medium) OR (ufc.utm_medium IS NULL)) 
            AND ((gcrvf.utm_content = ufc.utm_content) OR (ufc.utm_content IS NULL))
            AND ((gcrvf.utm_term = ufc.utm_term ) OR (ufc.utm_term IS NULL))
        GROUP BY
            ufc.counter_id,
            gcrvf.date_of_visit,
            gcrvf.goal_id,
            ufc.utm_campaign,
            ufc.utm_source,
            ufc.utm_medium,
            ufc.utm_content,
            ufc.utm_term,
            ufc.original_join_id,
            c.name,
            c.owner_login,
            c.status,
            metric_type,
            metric_key,
            metric_name 

我必須按幾乎所有列進行GROUP BY 這是一個真正的問題嗎?

ufc.original_join_id , c.name,c.owner_login , c.status , metric_type , metric_key,metric_name在這里不是必需的。 我將它們添加到分組依據只是因為我需要這些列。 我想問:有什么辦法可以讓它更縮寫嗎? 有什么方法可以避免 group by 中不必要的列? 還是沒事?

我的第二個問題:當我們使用 JOIN 時,ClickHouse 會緩存right table嗎? 所以我總是應該把大桌子放在左桌子上?

group by 中的所有列都是必需的。 不可能將某些列稱為 select 列。

根據您的索引列,您可以提高查詢速度。 您應該嘗試在鍵列上建立索引。

數據庫將為您處理緩存邏輯。 取決於您執行查詢的頻率。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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