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