簡體   English   中英

Clickhouse 交叉加入解決方法?

[英]Clickhouse Cross join workaround?

我正在嘗試計算 Clickhouse 中每個 IP 地址的錯誤交易狀態的百分比。


SELECT
    c.source_ip,
    COUNT(c.source_ip) AS total,
    (COUNT(c.source_ip) / t.total_calls) * 100 AS percent_faulty
FROM sip_transaction_call AS c
CROSS JOIN
(
    SELECT count(*) AS total_calls
    FROM sip_transaction_call
) AS t
WHERE (status = 8 OR status = 9 or status = 13)
GROUP BY c.source_ip

不幸的是,Clickhouse 拒絕了這一點:

“從服務器收到異常(版本 20.8.3):代碼:47。DB::Exception:從 127.0.0.1:9000 接收。DB::Exception:未知標識符:total_calls 有列:source_ip,COUNT(source_ip)。”

我為“隱形”別名嘗試了各種解決方法,但都失敗了。 任何幫助將不勝感激。

如果您有 GROUP BY 子句,則只能使用您分組的列(即c.source_ip ) - 對於其他人,您需要聚合 function。

Clickhouse 在這里不是很有幫助 - 對於幾乎任何其他引擎,您都會得到一個更有意義的錯誤。 請參閱https://learnsql.com/blog/not-a-group-by-expression-error/

無論如何,將分組更改為GROUP BY c.source_ip, t.total_calls來修復它。

謝謝。 不幸的是,這並沒有達到我想要的效果。 我想計算每個 IP 的錯誤交易的百分比,而不是所有交易的總數。

對於 percent_faulty 我需要除以每個 IP 的總數,而不是所有 IP 的總數。

SELECT source_ip, countIf(status = 8 OR status = 9 or status = 13) AS failed, failed / count() * 100 AS percent_faulty FROM sip_transaction_call GROUP BY source_ip

暫無
暫無

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

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