首页 > 解决方案 > 选择联合计数和组,多个表,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"

我该如何解决?谢谢

标签: sqlpostgresql

解决方案


通过聚合每个表,您会得到如下结果:

mmsi 类型 lw 标志计数(*)
123 456 美国广播公司 12
123 456 美国广播公司 25
234 567 XYZ 17
234 567 XYZ 11

因为UNION没有检测到任何重复,因为计数不同。如果有两行具有相同的计数,则将删除一个,因此计数太小了 50%。

你可能想要这个:

mmsi 类型 lw 标志计数(*)
123 456 美国广播公司 37
234 567 XYZ 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

推荐阅读