我有一个数据库,用于跟踪学区使用的企业系统。我数据库中的800个学区中的每个学区都有40个不同类别的系统列表。我可以轻松输出每个分区的系统,或按类别输出使用每个系统的分区的列表。

例如,有121个地区全部使用第一类的“产品1”。在这些地区中,有83个使用第二类的“产品1”。只有32个地区也使用第三类的“产品1”,依此类推。最终,通过抽查结果,我可以找到只有5个共同点的地区。但是我可能是错的。可能有两个区域共享6或7甚至8个系统。数据库越来越庞大,需要依靠人工抽查!

我感兴趣的是一系列SQL查询,这些查询将识别共享最大系统数的两个区域。或者更好的是,按区域列出它们与相关区域共享多少个系统的列表。

A,F区共用8个系统。
A,C,F区共用7个系统。
A,B,C,D,E,F区共享2个系统。

或者,

8个系统
A区
F区

7系统
A区
C区
F区

任何帮助,将不胜感激。

最佳答案

我希望这有帮助

DROP TABLE IF EXISTS systems;
CREATE TABLE systems( id          integer,  name    text);
  INSERT INTO systems VALUES (1,'SYS 1');
  INSERT INTO systems VALUES (2,'SYS 2');
  INSERT INTO systems VALUES (3,'SYS 3');
  INSERT INTO systems VALUES (4,'SYS 4');
  INSERT INTO systems VALUES (5,'SYS 5');
 DROP TABLE IF EXISTS districts;
CREATE TABLE districts( id          integer,  name    text);
 INSERT INTO districts VALUES (1,'DISCT A');
  INSERT INTO districts VALUES (2,'DISCT B');
  INSERT INTO districts VALUES (3,'DISCT C');
 DROP TABLE IF EXISTS relations;
CREATE TABLE relations( id_district          integer,  id_system    integer);
  INSERT INTO relations VALUES (1,1);
  INSERT INTO relations VALUES (1,2);
  INSERT INTO relations VALUES (1,5);
  INSERT INTO relations VALUES (2,2);
  INSERT INTO relations VALUES (3,1);
  INSERT INTO relations VALUES (3,3);

SELECT b.name as SYSTEMS, COUNT(*) as QTY, GROUP_CONCAT(c.name) as DISTRICTS
   FROM relations a
INNER JOIN systems b
ON a.id_system=b.id
INNER JOIN districts c
ON a.id_district = c.id
   GROUP BY b.name;

关于mysql - MySQL查询以识别具有相似数据的组合组数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48633135/

10-11 03:31
查看更多