簡體   English   中英

選擇聯合計數和組,多個表,PostgreSQL

[英]select union count and group, multiple tables, postgresql

您好,我有12個表格,我想為所有表格中的某些字段獲取唯一值。 通過運行以下查詢(我在2個表之間進行了測試),我得到了可觀的結果,但是如果唯一值存儲在兩個表中,則重復計數:

SELECT "mmsi", "type", "l", "w", "flag", COUNT (*) FROM test_1 GROUP BY "mmsi", "type", "l", "w", "flag"
UNION
SELECT "mmsi", "type", "l", "w", "flag", COUNT (*) FROM test_2 GROUP BY "mmsi", "type", "l", "w", "flag"

我該如何解決? 謝謝

通過匯總每個表,您將得到如下結果:

mmsi   type   l   w   flag   count(*)
123    456    A   B   C      12
123    456    A   B   C      25
234    567    X   Y   Z      17
234    567    X   Y   Z      11

因為UNION由於計數不同而不會檢測到任何重復項。 並且如果有兩行具有相同的計數,那么將刪除其中的一行,因此該計數太小了50%。

您可能想要這樣:

mmsi   type   l   w   flag   count(*)
123    456    A   B   C      37
234    567    X   Y   Z      28

而不管總數,無論在哪個表中。 因此,首先要獲得一組所有記錄(使用UNION ALL ),然后進行匯總。

SELECT mmsi, type, l, w, flag, COUNT (*)
FROM
(
  SELECT mmsi, type, l, w, flag FROM test_1 
  UNION ALL
  SELECT mmsi, type, l, w, flag FROM test_2
) all_records
GROUP BY mmsi, type, l, w, flag

我會嘗試從原始查詢中創建一個嵌入式查詢,然后按原始字段(不包括count字段)進行分組,並對外部查詢中的計數求和。

這是一些示例SQL演示了這個想法:

select "mmsi", "type", "l", "w", "flag", SUM(c) from
(SELECT "mmsi", "type", "l", "w", "flag", COUNT (*) as c FROM test_1 GROUP BY "mmsi", "type", "l", "w", "flag"
UNION
SELECT "mmsi", "type", "l", "w", "flag", COUNT (*) as c FROM test_2 GROUP BY "mmsi", "type", "l", "w", "flag") q 
group by "mmsi", "type", "l", "w", "flag"

您將必須檢查語法是否正確,但這足以使您有所了解。

也許我已經這樣解決了:

SELECT "mmsi", "type", "l", "w", "flag" , COUNT (*)
FROM (SELECT "mmsi", "type", "l", "w", "flag" FROM test_1
UNION ALL
SELECT "mmsi", "type", "l", "w", "flag" FROM test_2) As test
GROUP BY "mmsi", "type", "l", "w", "flag"
SELECT 
  (select count(*) from table1 where ID = '123')
  + (select count(*) from table2 where ID = '456')
  + (select count(*) from table3 where ID = '789')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM