sql - 选择联合计数和组,多个表,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 类型 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
推荐阅读
- hasura - hasura 是否生成索引?
- java - 如何调用存在于一个类中的参数化构造函数,该类中用@Component注释的另一个类注释@Service
- python - 关于属性对象如何为这个私有变量提供接口的问题
- java - Reactor Flux 和 Java Fiber 的区别
- r - 如何在 Rmarkdown 中整齐地显示数百个图?
- javascript - 从 json 字符串转换为 json 对象后,如何从 Typescript 中的对象数组中获取结果,我的编码有什么问题
- java - 这两种并发实现中哪一种更好更快
- java - Java 文件输出:卡片组的数字格式错误,卡片数量仅在运行时知道
- javascript - 如何在不格式化代码的情况下从 Webpack 的包中删除注释?
- gdb - 如何进行 GDB 回溯,只显示函数名而不显示其他内容?