我正在嘗試計算 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)。”
我為“隱形”別名嘗試了各種解決方法,但失敗了。任何幫助將不勝感激。
uj5u.com熱心網友回復:
如果您有一個 GROUP BY 子句,您只能使用您分組依據的列(即c.source_ip) - 對于其他人,您需要一個聚合函式。
Clickhouse 在這里沒有太大幫助 - 對于幾乎任何其他引擎,您都會遇到更有意義的錯誤。請參閱https://learnsql.com/blog/not-a-group-by-expression-error/。
無論如何,將分組更改為GROUP BY c.source_ip, t.total_calls以修復它。
uj5u.com熱心網友回復:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/403148.html
標籤:
