Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用union all和group by时获取所有最后一个id_Mysql_Sql - Fatal编程技术网

Mysql 使用union all和group by时获取所有最后一个id

Mysql 使用union all和group by时获取所有最后一个id,mysql,sql,Mysql,Sql,如何更改以下代码以获得所有三元组nr1、n2、n3的最大id? 每一组三元组都会出现多次id。我想得到每个三元组的最大id。例如: id Number1 Number2 Number3 Number4 Number5 66 2 3 4 7 9 74

如何更改以下代码以获得所有三元组nr1、n2、n3的最大id? 每一组三元组都会出现多次id。我想得到每个三元组的最大id。例如:

id    Number1   Number2   Number3   Number4   Number5                                                                       
66       2         3         4         7         9
74       2         3         5         6         8                        
102      3         7         8         9        10
123      3         6         7         9        10
157      1         2         3         4         5   
188      1         2         3         5         7 
按计数顺序回答前两行:

nr1   nr2   nr3   count   max_id                                            
 2     3     5      3       188
 3     7     9      3       123
我试图在select和having中添加id,但结果不完整。请帮忙

select nr1,nr2,nr3, count(*)
from         (select Number1 as nr1, Number2 as nr2, Number3 as nr3 from tab
              union all
              select Number1 as nr1, Number2 as nr2, Number4 as nr3 from tab
              union all
              select Number1 as nr1, Number2 as nr2, Number5 as nr3 from tab
              union all
              select Number1 as nr1, Number3 as nr2, Number4 as nr3 from tab
              union all
              select Number1 as nr1, Number3 as nr2, Number5 as nr3 from tab
              union all
              select Number1 as nr1, Number4 as nr2, Number5 as nr3 from tab
              union all
              select Number2 as nr1, Number3 as nr2, Number4 as nr3 from tab
              union all
              select Number2 as nr1, Number3 as nr2, Number5 as nr3 from tab
              union all
              select Number2 as nr1, Number4 as nr2, Number5 as nr3 from tab
              union all
              select Number3 as nr1, Number4 as nr2, Number5 as nr3 from tab) g
group by nr1, nr2, nr3
ORDER BY count(*) DESC, nr1, nr2, nr3

描述顺序中的最后一个是ASC中的第一个,因此可以对ASC使用限制1

    select nr1,nr2,nr3, count(*)
    from         (select Number1 as nr1, Number2 as nr2, Number3 as nr3 from table
                  union all
                  select Number1 as nr1, Number2 as nr2, Number4 as nr3 from table
                  union all
                  select Number1 as nr1, Number2 as nr2, Number5 as nr3 from table
                  union all
                  select Number1 as nr1, Number3 as nr2, Number4 as nr3 from table
                  union all
                  select Number1 as nr1, Number3 as nr2, Number5 as nr3 from table
                  union all
                  select Number1 as nr1, Number4 as nr2, Number5 as nr3 from table
                  union all
                  select Number2 as nr1, Number3 as nr2, Number4 as nr3 from table
                  union all
                  select Number2 as nr1, Number3 as nr2, Number5 as nr3 from table
                  union all
                  select Number2 as nr1, Number4 as nr2, Number5 as nr3 from table
                  union all
                  select Number3 as nr1, Number4 as nr2, Number5 as nr3 from table) g
    group by nr1, nr2, nr3
    ORDER BY count(*) ASC, nr1, nr2, nr3
    LIMIT 1

您应该修复数据结构。最好每个id和每个数字有一行

这看起来会很复杂。不寻常的是,我将从MySQL不支持CTE的视图开始:

create view better_data as
    select id, number1 as num, 1 as which from tab union all
    select id, number2 as num, 2 as which from tab union all
    select id, number3 as num, 3 as which from tab union all
    select id, number4 as num, 4 as which from tab union all
    select id, number5 as num, 5 as which from tab;
然后,可以使用以下命令生成所有三元组:

select distinct bd1.num, bd2.num, bd3.num
from better_data bd1 cross join
     better_data bd2 cross join
     better_data bd3
where bd1.num < bd2.num and bd2.num < bd3.num;
现在,您可以使用聚合计算这些值:

select triples.num1, triples.num2, triples.num3, count(*) as cnt
from (select distinct bd1.num as num1, bd2.num as num2, bd3.num as num3
      from better_data bd1 cross join
           better_data bd2 cross join
           better_data bd3
      where bd1.num < bd2.num and bd2.num < bd3.num
     ) triples left join
     t
     on triples.num1 in (tab.number1, tab.number2, tab.number3, tab.number4, tab.number5) and
        triples.num2 in (tab.number1, tab.number2, tab.number3, tab.number4, tab.number5) and
        triples.num3 in (tab.number1, tab.number2, tab.number3, tab.number4, tab.number5)
group by triples.num1, triples.num2, triples.num3
order by count(*) desc;

也许我表达得不好。每一组三元组都会出现多次id。我想得到每个三元组的最大id。例如:第一组:2,3,5-ID74157188;第二组为3,7,9-ID66102123。除了我现在从数据库得到的响应之外,我还想得到每个集合的最大id:188123为了避免糟糕的表达,你应该更新你的问题,添加一个适当的数据样本作为表格文本和预期结果。在注释中读取示例是不可能的。表是MySQL中的保留字