0

假设我们有一个查询

SELECT recordType,SUM(amount) FROM records GROUP BY recordType

输出

1: 50
2: 100
3: 150
4: 200

我们有 4 种不同的记录类型,它们是 1、2、3 和 4。上面的查询显然会返回为这 4 种类型分组的值。如何调整查询以根据配对分组显示分组。就像在一行中返回recordType 1和recordType 2的结果,在第二行中返回3和4的结果。

预期产出

Group 1: 150
Group 2: 350
4

2 回答 2

2

比如在一行中返回recordType 1和recordType 2的结果,在第二行中返回3和4的结果。

您可以使用 case 语句来做到这一点。它的性能不会很好,但它会起作用。根据您的实际值,最终查询可能如下所示:

group by case
         when type in(1, 2) then 1
         when type in(3, 4) then 2
         when ...
         else ...
         end
于 2013-06-16T15:14:36.967 回答
1

问题的一部分是正确地进行分组,另一部分是获取组的名称。

如果你真的有问题的数字,你可以这样做:

select concat('Group ', cast((recordType - 1)/2 as int)), count(*)
from records r
group by cast((recordType - 1)/2 as int)

如果这些值实际上在算术上不那么适合,那么变量可能是最简单的方法:

select concat('Group ', @rn := @rn + 1), count(*)
from records r cross join (select @rn := 0) const
group by (case when type in (1, 2) then 1
               when type in (3, 4) then 2
          end)
于 2013-06-16T15:53:02.600 回答