首页 > 解决方案 > 如何创建加入中未找到的项目计数?

问题描述

我有两个表,第一个有 ID 和数字。

我的第二个表再次包含 ID 和 Numbers 行(以及其他数据)(以及其他数据)。我需要在该表中搜索任何 ID,其 Number 不在结果表中的 Numbers 列表中。以及识别表 2 中存在但表 1 中不存在的任何 ID。

我还需要计算表 2 中有多少项目具有表 1 不允许的数字,或者具有表 1 中不存在的 ID。

ID 和编号可能会在两个表中多次列出,并且它们可能存在也可能不存在于任一表中。

除计数外,一切正常。我可以确定哪些 ID 存在或不存在,并且可以创建一个不允许编号的列表。但计数工作不正常。它返回的数字要高得多。

如何合并返回正确数字的计数?我认为它目前计算了所有可能的匹配迭代。

DROP TABLE IF EXISTS `myTable`;

CREATE TABLE `myTable` (
  `id` mediumint(8) unsigned NOT NULL auto_increment,
  `ID` varchar(255),
  `Numbers` mediumint default NULL,
  PRIMARY KEY (`id`)
) AUTO_INCREMENT=1;

INSERT INTO `myTable` (`ID`,`Numbers`)
VALUES
  ("CRQ44MPX1SZ",1890),
  ("UHO21QQY3TW",4370),
  ("JTQ62CBP6ER",1825),
  ("RFD95MLC2MI",5014),
  ("URZ04HGG2YQ",2859),
 ("CRQ44MPX1SZ",1891),
  ("UHO21QQY3TW",4371),
  ("JTQ62CBP6ER",1826),
  ("RFD95MLC2MI",5015),
  ("URZ04HGG2YQ",2860),
 ("CRQ44MPX1SZ",1892),
  ("UHO21QQY3TW",4372),
  ("JTQ62CBP6ER",1827),
  ("RFD95MLC2MI",5016),
  ("URZ04HGG2YQ",2861);



DROP TABLE IF EXISTS `myTable2`;

CREATE TABLE `myTable2` (
  `id` mediumint(8) unsigned NOT NULL auto_increment,
  `ID` varchar(255),
  `Numbers` mediumint default NULL,
  PRIMARY KEY (`id`)
) AUTO_INCREMENT=1;

INSERT INTO `myTable2` (`ID`,`Numbers`)
VALUES
  ("CRQ44MPX1SZ",1870),
  ("UHO21QQY3TW",4350),
  ("JTQ62CBP6ER",1825),
  ("RFD95MLC2MI",5014),
  ("URZ04HGG2YQ",2859),
 ("CRQ44MPX1SZ",1891),
  ("UHO21QQY3TW",4371),
  ("JTQ62CBP6ER",1826),
  ("RFD95MLC2MI",5015),
  ("URZ04HGG2YQ",2860),
 ("CRQ44MPX1SZ",1882),
  ("UHO21QQY3TW",4372),
  ("JTQ62CBP6ER",1827),
  ("RFD95MLC2MI",5016),
  ("URZ04HGG2YX",2861),
  ("URZ04HGG2YX",2867),
  ("URZ04HGG2YX",2869),
  ("URZ04HGG2YX",2869);


SELECT mytable2.ID, case when mytable3.ID is null then 0 else 1 end as id_found, count(mytable2.Numbers) as num_count, listagg(distinct mytable2.Numbers,',') as num_list
FROM mytable2
  LEFT JOIN mytable1
    ON mytable2.ID = mytable1.ID 
      AND mytable2.Numbers = mytable1.Numbers
  LEFT JOIN mytable1 as mytable3
    ON mytable2.ID = mytable3.ID 
WHERE mytable1.Numbers is null
GROUP BY mytable2.ID, mytable3.ID
ORDER BY num_count DESC,  mytable2.ID

预期输出:

(“CRQ44MPX1SZ”, 1, 2, ”1870,1882”)
(“UHO21QQY3TW”, 1, 1, ”4350”)
("URZ04HGG2YX", 0, 4, "2861, 2867, 2869")

标签: amazon-web-servicesamazon-redshift

解决方案


推荐阅读