微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过输出错误结果计算百分比组

如何解决通过输出错误结果计算百分比组

我正在尝试从 clickhouse 数据库中的表格中获取百分比。我在编写一个查询来计算每个时间戳组内的类型百分比时遇到了困难。

SELECT
    (intDiv(toUInt32(toDateTime(atime)),120) * 120) * 1000 AS timestamp,if(dateDiff('second',toDateTime(t1.atime),toDateTime(t2.unixdsn)) <= 5,'sec5',if((dateDiff('second',toDateTime(t2.unixdsn)) > 5) AND (dateDiff('second',toDateTime(t2.unixdsn)) <= 30),'sec30',toDateTime(t2.unixdsn)) > 30) AND (dateDiff('second',toDateTime(t2.unixdsn)) <= 60),'sec60','secgt60'))) AS type,count() AS total_count,(total_count * 100) / 
    (
        SELECT count()
        FROM sess_logs.logs_view
        WHERE (status IN (0,1)) AND (toDateTime(atime) >= toDateTime(1621410625)) AND (toDateTime(atime) <= toDateTime(1621421425))
    ) AS percentage_cnt
FROM sess_logs.logs_view AS t1
INNER JOIN 
(
    SELECT
        trid,atime,unixdsn,status
    FROM sess_logs.logs_view
    WHERE (status = 1) AND (toDate(date) >= toDate(1621410625)) AND if('all' = 'all',1,userid = 
    (
        SELECT userid
        FROM sess_logs.user_details
        WHERE (username != 'all') AND (username = 'all')
    ))
) AS t2 ON t1.trid = t2.trid
WHERE (t1.status = 0) AND (t2.status = 1) AND ((toDate(atime) >= toDate(1621410625)) AND (toDate(atime) <= toDate(1621421425))) AND (toDateTime(atime) >= toDateTime(1621410625)) AND (toDateTime(atime) <= toDateTime(1621421425)) AND if('all' = 'all',userid = 
(
    SELECT userid
    FROM sess_logs.user_details
    WHERE (username != 'all') AND (username = 'all')
))
GROUP BY
    timestamp,type
ORDER BY timestamp ASC

输出

┌─────timestamp─┬─type────┬─total_count─┬─────────percentage_cnt─┐
│ 1621410600000 │ sec5    │       15190 │     0.9650982602181922 │
│ 1621410600000 │ sec30   │        1525 │    0.09689103665785011 │
│ 1621410600000 │ sec60   │          33 │   0.002096658498169871 │
│ 1621410600000 │ secgt60 │          61 │  0.0038756414663140043 │
│ 1621410720000 │ secgt60 │          67 │   0.004256852102344891 │
│ 1621410720000 │ sec30   │        2082 │    0.13228009070271735 │
│ 1621410720000 │ sec60   │          65 │   0.004129781890334595 │
│ 1621410720000 │ sec5    │       20101 │     1.2771191658094723 │
│ 1621410840000 │ sec30   │        4598 │    0.29213441741166873 │
│ 1621410840000 │ sec60   │          36 │   0.002287263816185314 │
│ 1621410840000 │ secgt60 │          61 │  0.0038756414663140043 │
│ 1621410840000 │ sec5    │       17709 │     1.1251431922451591 │
│ 1621410960000 │ sec60   │          17 │  0.0010800968020875095 │
│ 1621410960000 │ secgt60 │          81 │   0.005146343586416957 │
│ 1621410960000 │ sec30   │        2057 │    0.13069171305258864 │
│ 1621410960000 │ sec5    │       18989 │      1.206468127931748 │
│ 1621411080000 │ sec60   │           9 │  0.0005718159540463285 │
│ 1621411080000 │ sec30   │        3292 │    0.20915756896894594 │
│ 1621411080000 │ sec5    │       15276 │     0.9705622793346349 │
│ 1621411080000 │ secgt60 │          78 │   0.004955738268401514 │
└───────────────┴─────────┴─────────────┴────────────────────────┘

它正在返回每一行的百分比,但是当我对百分比_cnt 列求和时,总数不会达到 100%,而是达到 80%。 请帮助我更正我的查询。我知道查询很大,你们可以为我的用例提供更简单的示例。谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。