SQL组按n组?

时间:2012-12-02 03:20:22

标签: mysql sql

我需要将数据库中的某些行分组为n。

示例:

select max(data) from tableA group by (groups of 2) order by id;

结果: 20,30,5

所以...

第1组持有id 1& 2,组2持有id 3& 4,组3将保持id 5& 6。

tableA
| id  |  data |     
---------------
| 1   | 10    |
| 2   | 20    |
| 3   | 15    |
| 4   | 30    |
| 5   | 5     |
| 6   | 0     |
---------------

有没有办法用SQL实现这个?

注意:系统正在MySql上运行。

2 个答案:

答案 0 :(得分:5)

select
    (mod(id, 2) + id)/2 as id_group,
    max(data) as max_data
from tableA
group by 1

查看在sqlfiddle

中运行的此查询

答案 1 :(得分:3)

由于GROUP BY可以包含任意表达式,因此如果CASE的值{1}}等于1,则可以使用id返回MOD 2id - 1 } 除此以外。这将它们成对分组,从1开始递增。

SELECT MAX(data) AS maxdata
FROM tableA
/* GROUP BY the id or (id - 1) depending on the result of its modulo 2 */
GROUP BY CASE WHEN id MOD 2 = 1 THEN id ELSE (id - 1) END

Here is a demo on SQLfiddle.com

允许非顺序ID

更新

一夜之间,我觉得这个解决方案只适用于id顺序值这一事实。如果删除了行,则不会再获得正确的结果。因此,这里有一个版本可以解释非连续的,有缺口的id s:

SET @rowid = 0;
SELECT 
  MAX(data) AS maxdata
FROM (
  SELECT  
    @rowid := @rowid + 1 AS rd,
    data
  FROM tableA
) subq
GROUP BY CASE WHEN rd MOD 2 = 1 THEN rd ELSE (rd - 1) END

And the updated SQLfiddle...