2016-09-22 163 views
-1

connection_table极品嵌套select查询

 
    app | src_port | dst_port | src_ip | dst_ip | time | L1 | L2 
----------+-----------+----------+----------+---------+-------+-----+---- 
    HTTP | 100  | 200  | x  | y  | t1 | 1 | 0  
    HTTPS | 101  | 300  | x  | y  | t1 | 1 | 0 
    HTTP | 102  | 200  | a  | b  | t2 | 0 | 1 
    HTTP | 100  | 200  | x  | y  | t2 | 1 | 0 
    HTTP | 100  | 200  | x  | y  | t3 | 1 | 0 
    HTTP | 111  | 200  | x  | y  | t4 | 1 | 0 

结果

 
    app | sum(L1) | sum(L2) 
----------+----------+-------- 
    HTTP | 2  | 1 
    HTTPS | 0  | 1 

查询

select app_table.app, 
     SUM(app_table.L1), 
     SUM(app_table.L2) 
from (
    select app, L1, L2 
    from connection_table 
    group by app, src_port, dst_port, src_ip, dst_ip 
) as app_table 
group by app_table.app; 

钍简单Postgres的查询上述查询用于获取结果。我需要一个没有嵌套选择的查询?
在这里,src_port,dst_port,src_ip和dst_ip唯一标识一个应用程序。需要统计每个应用的总L1和L2。

+0

你真的使用所有的DBMS在这里? (不要标记不涉及的产品。) – jarlh

+0

使用派生表有什么问题? –

+0

简单查询只适用于我的应用程序。如果这是获得结果的唯一方法,那就没问题。 – Kranthi

回答

0

使用集团通过

注:您的输出似乎是错误的。

SELECT 
    app, 
    SUM(L1) AS L1, 
    SUM(L2) AS L2 
FROM connection_table T 
GROUP BY T.app 

输出:

enter image description here

+0

这将纯粹按应用分组。不是真正的解决方案。 – Kranthi

+0

它看起来像你的最终输出,是你的输出,然后我的答案? –

+0

您的输出是正确的,但对于给定的要求不起作用。你可以使用不同的“src_port”检查多个条目并且具有相同的应用程序吗? – Kranthi