您好,我有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"
我该如何解决?谢谢
答案 0 :(得分:1)
通过汇总每个表,您将得到如下结果:
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
答案 1 :(得分:0)
我会尝试从原始查询中创建一个嵌入式查询,然后对原始字段(不包括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"
您必须检查语法是否正确,但这足以使您有所了解。
答案 2 :(得分:0)
也许我已经通过这种方式解决了:
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"
答案 3 :(得分:0)
fun linspace(start: Int, stop: Int, num: Int) = Array(num) { start + it * ((stop - start) / (num - 1)) }