[英]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.