我有一个表,其中包含几个进入其他表的键(每个键由多个列组成)。我希望能够将具有相同键的行分组在一起,但是我不想将所有行分组在一起。这不是简单GROUP BY
的键,而是我希望能够使分组的数量为10。因此,如果某个特定键出现50次,则当我进行分组时(5组,共10组),我将获得5个结果。我也希望该分组在密钥内随机发生。
我不知道直接执行此操作的方法,而且我想出的环形交叉路方法无法正常工作。我想到的回旋解决方案是为每个键创建一个新列,该键将是一个整数,以使值i
表示该ith
键的出现(但以随机顺序)。然后,我可以进行整数除法,以使键中的每n个(例如10个)行具有相同的值,并且可以GROUP BY
对该值进行a运算。
有没有更直接的方法来完成我刚刚描述的内容?这很尴尬,在创建新的索引列时遇到了问题(正如我在此问题中所述)。
编辑:首先请注意,这是针对MySQL。如果我的目标不清楚,我将添加一个示例。MySQL文档显示了一种接近目标的方法:
CREATE TABLE animals (
grp ENUM('fish','mammal','bird') NOT NULL,
id MEDIUMINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (grp,id)
) ENGINE=MyISAM;
INSERT INTO animals (grp,name) VALUES
('mammal','dog'),('mammal','cat'),
('bird','penguin'),('fish','lax'),('mammal','whale'),
('bird','ostrich');
SELECT * FROM animals ORDER BY grp,id;
这将创建一个表,该表虽然不是我想要的,但会变得接近:
+--------+----+---------+
| grp | id | name |
+--------+----+---------+
| fish | 1 | lax |
| mammal | 1 | dog |
| mammal | 2 | cat |
| mammal | 3 | whale |
| bird | 1 | penguin |
| bird | 2 | ostrich |
+--------+----+---------+
我本质上想GROUP BY
id,除了我希望记录mammal
具有一个ID为1-10的“组”,另一个ID为11-20的“组”,依此类推。但是,我将使用现有表来执行此操作,并且我并不一定希望“ dog”以ID 1出现。我希望初始顺序是随机的,但此后是确定性的。
numMammal
。我并不在乎id dog
会得到什么,但是我不希望它取决于原始的插入顺序。
GROUP BY
。然后,我可能想配对10个一组以求平均值之间的相关性。我需要这种随机排序,因为如果原始插入顺序碰巧是按重量排序的,那么这将给我带来错误的结果。我希望我有道理。
I would want that initial ordering to be random, but then deterministic from then out.
<-说什么?我认为无论您做什么工作,都必须将记录放入某种形式的第二张表中。此业务逻辑如何精确地工作?因为没有什么要求(例如)狗先出现。您的意思是I would want the records from *mammal* to have one "group" for IDs 1-10, and another for IDs 11-20
...您能在上面的问题描述中用另一个专注于哺乳动物的表格来说明这一点吗?