2017-08-04 5 views
0

表「」内容上記:私はそのカウントしてIPアドレスを注文する必要があり、また、そのポートの注文数を必要とするすでにグループ化し、集計データにすることにより、グループ - Postgresqlの9.3と

 IP  | Port 
----------------+------- 
10.211.240.300 | 10 
10.211.240.300 | 10 
10.211.240.300 | 20 
10.211.240.300 | 20 
10.211.240.300 | 20 
10.211.240.300 | 20 
10.211.240.300 | 30 
10.211.240.300 | 30 
10.211.240.300 | 30 
10.211.240.200 | 10 
10.211.240.200 | 10 
10.211.240.200 | 10 
10.211.240.200 | 20 
10.211.240.200 | 20 
10.211.240.200 | 20 
10.211.240.200 | 20 
10.211.240.200 | 30 
10.211.240.100 | 10 
10.211.240.100 | 10 
10.211.240.100 | 10 
10.211.240.100 | 10 
10.211.240.100 | 10 
10.211.240.100 | 10 
10.211.240.100 | 10 
10.211.240.100 | 10 
10.211.240.100 | 20 
10.211.240.100 | 20 
10.211.240.100 | 20 
10.211.240.100 | 30 
10.211.240.100 | 30 
10.211.240.100 | 30 
10.211.240.100 | 30 
10.211.240.100 | 30 

ので、上記のデータの予想結果は次のとおりです。

 IP  | Port | PortCount | TotalCount 
---------------------------------------------- 
10.211.240.100 | 10  | 08  | 16 
10.211.240.100 | 30  | 05  | 16 
10.211.240.100 | 20  | 03  | 16 
10.211.240.300 | 30  | 04  | 09 
10.211.240.300 | 20  | 03  | 09 
10.211.240.300 | 10  | 02  | 09 
10.211.240.200 | 20  | 04  | 08 
10.211.240.200 | 10  | 03  | 08 
10.211.240.200 | 30  | 01  | 08 

いくつかのいずれかが同じのためにpostgresのリレーショナルクエリで私を助けてくださいことはできますか?私はこのテスト

+0

あなたのデータサンプルが明確ではない、あなたはそれが読める形式してくださいだろうか? .. –

答えて

0
SELECT A.IP, A.PORT, T2.PORT_COUNT, COUNT(*) 
FROM A JOIN (
      SELECT T1.IP, COUNT(T1.PORT) AS PORT_COUNT 
      FROM A AS T1 
      GROUP BY T1.IP 
      ) AS T2 
      ON A.IP = T2.IP 
GROUP BY A.IP, A.PORT 

オンラインDB:あなたは、PostgreSQLを使用している場合http://sqlfiddle.com/#!9/23a78/6

0

は、クエリを使用してください: -

SELECT a.IP, a.PORT,total_count.total,COUNT(*) 
FROM a 
JOIN (
     SELECT b.IP, COUNT(b.PORT) AS total 
     FROM a AS b 
     GROUP BY b.IP 
     ) AS total_count 
     ON a.IP = total_count.IP 
GROUP BY a.IP, a.PORT,total_count.total 
ORDER BY a.ip 
+0

私はいくつかのさらなる助けが必要です..私はトップ2のポートが必要とポートの残りの "他の"と言うように集計する必要があります..のでexpcted出力です:IP |ポート|ポートカウント| TotalCount 10.211.240.100 | 10 | 08 | 16 10.211.240.100 |その他| 05 | 16 10.211.240.100 | 20 | 03 | 16 10.211.240.300 |その他| 04 | 09 10.211.240.300 | 20 | 03 | 09 10.211.240.300 | 10 | 02 | 09 10.211.240.200 | 20 | 04 | 08 10.211.240.200 | 10 | 03 | 08 10.211.240.200 |その他| 01 | 08 –

+0

助けていただきありがとうございます..目的はトップ5のIPアドレスを取得し、その上にTOP 2のポート数をそのまま返し、残りのポートを「その他」として集計します –

+0

@DivyeshKateliyaまだあなたが直面している何の問題? – Amit

関連する問題