Mysql sql获取两个元素

Mysql sql获取两个元素,mysql,sql,sql-server,math,Mysql,Sql,Sql Server,Math,我有以下sql表: | ID | numbers | |----|-----------------------------| | 1 | 1,3,19,23,28,32,39,42,60,80 | | 2 | 1,3,18,24,29,33,40,43,61,80 | | 3 | 1,2,3,25,30,34,41,44,62,78 | 在数字中,我有一个包含10个数字的字符串 我想在SQLServer或MySQL中获得所有两个元素(如果可能的

我有以下sql表:

| ID | numbers                     |
|----|-----------------------------|
|  1 | 1,3,19,23,28,32,39,42,60,80 |
|  2 | 1,3,18,24,29,33,40,43,61,80 |
|  3 | 1,2,3,25,30,34,41,44,62,78  |
在数字中,我有一个包含10个数字的字符串

我想在SQLServer或MySQL中获得所有两个元素(如果可能的话,还有三个、四个等)

例如,对于两个元素:

  • 所有行1,3个表(3次)
  • 1、80出现在第一行和第二行(2次)

我试图从每一行中分割数字,并插入到一个临时表中,然后生成10的组合,然后选择k(其中k是一对中的元素数),但有些东西不起作用。我不知道这是不是最好的主意

此时此刻我的代码:


谢谢

是的,把你的号码分成几行会让事情变得更简单。如果您使用的是MySQL,则可以使用如下查询:

CREATE TABLE mytable2 AS
SELECT
  ID, SUBSTRING_INDEX(SUBSTRING_INDEX(numbers, ',', n),',',-1) AS number
FROM
  mytable CROSS JOIN (SELECT 1 AS n
                      UNION ALL SELECT 2 AS n
                      UNION ALL SELECT 3 AS n
                      UNION ALL SELECT 4 AS n
                      UNION ALL SELECT 5 AS n
                      UNION ALL SELECT 6 AS n
                      UNION ALL SELECT 7 AS n
                      UNION ALL SELECT 8 AS n
                      UNION ALL SELECT 9 AS n
                      UNION ALL SELECT 10 AS n) d;
| appears | numbers       |
|---------|---------------|
|       3 | 3,1           |
|       2 | 80            |
|       1 | 43,23,40..... |
(如果所有数字正好包含10个数字,这将起作用,如果数量较少,则此查询需要一些改进)。然后,您可以计算每个数字出现的时间:

SELECT number, COUNT(*) as appears
FROM mytable2
GROUP BY number
ORDER BY appears DESC
您可以根据它们出现的次数对编号进行分组:

SELECT
  appears, GROUP_CONCAT(number) AS numbers
FROM (
    SELECT number, COUNT(*) as appears
    FROM mytable2
    GROUP BY number
    ORDER BY appears DESC
  ) g
GROUP BY
  appears
ORDER BY
  appears DESC
(仅限MySQL)结果如下:

CREATE TABLE mytable2 AS
SELECT
  ID, SUBSTRING_INDEX(SUBSTRING_INDEX(numbers, ',', n),',',-1) AS number
FROM
  mytable CROSS JOIN (SELECT 1 AS n
                      UNION ALL SELECT 2 AS n
                      UNION ALL SELECT 3 AS n
                      UNION ALL SELECT 4 AS n
                      UNION ALL SELECT 5 AS n
                      UNION ALL SELECT 6 AS n
                      UNION ALL SELECT 7 AS n
                      UNION ALL SELECT 8 AS n
                      UNION ALL SELECT 9 AS n
                      UNION ALL SELECT 10 AS n) d;
| appears | numbers       |
|---------|---------------|
|       3 | 3,1           |
|       2 | 80            |
|       1 | 43,23,40..... |

请看小提琴。

1。请在问题中发布所有相关代码,而不是在外部文件中。(请将其裁剪至演示问题所需的最低限度后张贴。)。在stackoverflow.com上,“有些东西不起作用”不能作为问题的描述。请准确地描述你期望发生的事情,并准确地描述发生的事情。你应该使用一个能让你的问题更容易解决的方法。