site device site_count
=================================
1 AB1 45
1 AB2 45
1 AB3 45
1 AB4 45
1 AB5 45
2 AB6 70
2 AB7 70
2 AB8 70
3 AB9 100
3 A10 100
4 A11 10
以下总和(site_count)是通过添加唯一网站的网站计数值获得的,即45 + 70 + 100 + 10 = 225(无论网站出现的次数如何)。
site device site_count sum(site_count)
====================================================
1 AB1 45 225
1 AB2 45 225
1 AB3 45 225
1 AB4 45 225
1 AB5 45 225
2 AB6 70 225
2 AB7 70 225
2 AB8 70 225
3 AB9 100 225
3 A10 100 225
4 A11 10 225
您是否可以发布查询以在一个查询中获取总和(site_count)和其他列值。结果集显示在上面。
答案 0 :(得分:1)
你可以在总和上使用distinct:
select site, device, site_count, sum(distinct site_count) over ()
from mytable;
编辑:当然你可以在没有窗口功能的情况下做同样的事情,但这可能会更慢:
select site, device, site_count, (select sum(distinct site_count) from mytable)
from mytable;
新编辑:我误读了您的请求。在下面的评论中,您已经解释过您不是在寻找不同的网站数量,而只是查找所有网站上的网站数量总和。所以这是对我的回答的更新。
不幸的是,您没有一个用于站点的表和一个用于设备的表,就像您应该的那样,但只有一个表用于保存站点的设备冗余计数。你应该改变它。说到这一点,当然即使像你这样的不利数据模型,仍然可以选择数据。这只是一点点工作。
每个网站需要一次网站计数。因此,按站点分组并获取最小值,最大值或平均站点数 - 它们应该与冗余存储的值相同。然后总结这些网站数量:
select site, device, site_count,
(
select sum(distinct_site_count)
from
(
select min(site_count) as distinct_site_count from mytable group by site
)
)
from mytable;
或更紧凑:
select site, device, site_count,
(select sum(min(site_count)) from mytable group by site)
from mytable;