我正在尝试链接两个具有相似列的表。我需要找出与table1.column 1和table 2.column 1不同的值有多少:
我现在的问题是:
SELECT i10_descr.i10_code, gems_pcsi9.i10_code
FROM i10_descr INNER JOIN gems_pcsi9 ON i10_descr.i10_code = gems_pcsi9.i10_code
ORDER BY i10_descr.i10_code;我知道这个查询显示了每个表的匹配代码:我不知道如何计算表中缺少的/不同的代码。
此外,我还必须计算代码的比率。
任何帮助、提示或指导都是非常感谢的。
谢谢
发布于 2014-05-06 07:18:43
您可以使用反联接模式来获取存在于一个表中但不存在于另一个表中的i10_code的列表。例如:
SELECT i.i10_code
FROM i10_descr i
LEFT
JOIN gems_pcsi9 g
ON g.i10_code = i.i10_code
WHERE g.i10_code IS NULL
ORDER BY i.i10_code如果只想要计数,可以在选择列表中使用COUNT(i.i10_code)和/或COUNT(DISINCT i.i10_code),并删除ORDER BY子句。
要在gems表中获取不在i10表中的i10_code,可以执行相同的操作,但将查询颠倒一下,这样gems就是“驱动”表。例如:
SELECT COUNT(DISTINCT g.i10_code) AS cnt_diff
FROM gems_pcsi9 g
LEFT
JOIN i10_descr i
ON i.i10_code = g.i10_code
WHERE i.i10_code IS NULL如果想要组合差异的数量,可以通过使两个查询成为内联视图来组合它们:
SELECT d.cnt_diff + e.cnt_diff AS total_diff
FROM (
SELECT COUNT(DISTINCT g.i10_code) AS cnt_diff
FROM gems_pcsi9 g
LEFT
JOIN i10_descr i
ON i.i10_code = g.i10_code
WHERE i.i10_code IS NULL
) d
CROSS
JOIN (
SELECT COUNT(DISTINCT i.i10_code) AS cnt_diff
FROM i10_descr i
LEFT
JOIN gems_pcsi9 g
ON g.i10_code = i.i10_code
WHERE g.i10_code IS NULL
) e注意: COUNT aggregate将忽略空值。如果您还想“计算”i10_code为NULL值的行,则需要调整查询。如果您只想要一些不同的值,则可以使用COUNT(DISTINCT )。一个COUNT()会给出很多行。如果有多个行具有相同的i10_code值,则这两个结果将不同。
为了获得代码的“比率”,假设在这一点上,“差异”无关紧要,您可以从每个表中获得代码的计数。这样做的查询可以在内联视图中使用:
SELECT d.cnt / e.cnt AS ratio_cnt_g_over_cnt_i
, d.cnt AS cnt_g
, e.cnt AS cnt_i
FROM (
SELECT COUNT(DISTINCT g.i10_code) AS cnt
FROM gems_pcsi9 g
) d
CROSS
JOIN (
SELECT COUNT(DISTINCT i.i10_code) AS cnt
FROM i10_descr i
) e发布于 2014-05-06 07:03:38
另一种方法是将union all与聚合一起使用:
select in_i10descr, in_gems_pcsi9, count(*) as numcodes
from (select code, max(in_i10descr) as in_i10descr, max(in_gems_pcsi9) as in_gems_pcsi9
from ((select i10_descr.i10_code as code, 1 as in_i10descr, 0 as in_gems_pcsi9
from i10_descr
) union all
(select gems_pcsi9.i10_code, 0, 1
gems_pcsi9.i10_code
)
) t
group by code
) c
group by in_i10descr, in_gems_pcsi9;这将分别计算每个表和两个表中的计数。
https://stackoverflow.com/questions/23483249
复制相似问题