gpt4 book ai didi

sql - SQL Union“所有其他”行

转载 作者:行者123 更新时间:2023-12-03 18:50:02 24 4
gpt4 key购买 nike

我有一个Sqlite数据库,其中包含接近500,000行的访问日志信息。我将其用于汇总信息,例如“每个IP到达站点的次数”或“命中百分比为POST”等。

我编写了一个SQL查询,该查询收集每个IP地址访问该站点的次数,该站点的出现次数大于IP地址数量的1%。

select ip_address, count(ip_address)
from records
group by ip_address
having count(ip_address) > (select count(ip_address) from records) * .01


这将返回大约7个有效IP地址。如何将“所有其他”行合并到结果集中?

我尝试了逻辑相反的UNIONing

select "All Others", count(ip_address)
from records
group by ip_address
having count(ip_address) < (select count(ip_address) from records) * .01


但这会返回多个“所有其他”行,其顺序是连续的。

最佳答案

当然,请使用union all,但这不能回答“问题”。

此问题是第二个查询“返回多个”(就像第一个查询一样),因为group by是按IP进行的,其中有很多。也就是说,每组有一个结果元组,与select输出子句中的任何操作无关。

期望的目标可能是对外部选择进行计数。

-- union all
select "All Others", sum(t.ct)
from (
select count(ip_address) as ct
from records
group by ip_address
-- note: <=, and not <, is inverse of >
having count(ip_address) <= (select count(ip_address) from records) * .01
) t


当然,如果知道“总计”和“找到”,那么“其他”就是“总计”-“找到”。

有趣的是,连续计数是无关紧要的。请记住,当没有对物化结果集应用 order by时,SQL可以以任何顺序返回行(不严格保证子选择中的 order by)。

关于sql - SQL Union“所有其他”行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29306670/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com