分组中的mysql限制
假设我有这个表字段:分组中的mysql限制,mysql,group-by,Mysql,Group By,假设我有这个表字段: Field1 Field2 Field3 a 1 1 a 1 2 a 1 3 a 1 4 a 2 1 a 2 2 a 2 3 a 3 1 b 1 1 b 1 2 b 1 3 b 2 1 c 1
Field1 Field2 Field3
a 1 1
a 1 2
a 1 3
a 1 4
a 2 1
a 2 2
a 2 3
a 3 1
b 1 1
b 1 2
b 1 3
b 2 1
c 1 1
假设我需要按字段1分组,因为我需要对数据进行一些计算,
是否有方法仅检索按Field2 sorted desc分组的前2个元素
因此,对于这个例子,我想重温一下:
a,3,1
a,2,3
a,2,2
a,1,4
a,1,3
b,1,2
b,1,1
b,2,1
c,1,1
大概是
SELECT field1,
Sum(field2),
Sum(field3)
FROM table t1
WHERE t1.Field1 IN (SELECT t2.Field1
FROM table t2
WHERE t2.Field1 = t1.Field1
ORDER BY Field2,
Field3 DESC
LIMIT 2)
GROUP BY field1
如果您使用的是MySQL 8+或更高版本,处理此问题的一个好方法是使用ROW_NUMBER: 如果您没有使用MySQL 8+,那么这个问题很快就会变得相当棘手。在MySQL 5.7或更早版本中,最好的方法是使用会话变量来模拟行数。但是,这需要一些详细的代码。您还可以尝试将每个组的前两个条目隔离开来,但这两个条目需要一些详细的代码。事实上,如果你需要长期运行这样的查询,那么考虑升级到MySQL 8 + ./P>前MySQL 8解决方案: 仅列出每个字段1、字段2组的最后两个值: 结果:
Field1 Field2 Field3
a 1 3
a 1 4
a 2 2
a 2 3
a 3 1
b 1 2
b 1 3
b 2 1
c 1 1
Field1 sum(Field2) sum(Field3)
a 9 13
b 4 6
c 1 1
获取每个Field1组的总和:
结果:
Field1 Field2 Field3
a 1 3
a 1 4
a 2 2
a 2 3
a 3 1
b 1 2
b 1 3
b 2 1
c 1 1
Field1 sum(Field2) sum(Field3)
a 9 13
b 4 6
c 1 1
注意:当Filed1、Filed2、Filed3的组合是唯一的时,这可以正常工作。如果Field3可以在Field1、Field2组中复制,我们需要更复杂的逻辑来将结果限制为每个组两行。您使用的MySql版本是什么?版本5.7.18上的I am可能重复。您确定要使用Sumfield2吗?该值重复。@renemarxis然后检查注释上方的链接。或者升级到MySQL 8+并使用my answer.FWIW,我认为5.7查询与8.0查询的字符长度相同
Field1 sum(Field2) sum(Field3)
a 9 13
b 4 6
c 1 1