我有一个表,其中包含进入其他表的几个键(其中每个键由多列组成)。我希望能够将具有相同键的行组合在一起,但我不想将所有行组合在一起。这不是一个简单GROUP BY
的键,而是我希望能够分组说 10。所以如果一个特定的键出现 50 次,当我进行这个分组时我会得到 5 个结果(5 组,每组 10 个)。我还希望此分组在密钥内随机发生。
我不知道这样做的直接方法,而且我想出的迂回方法并没有像我认为的那样工作。我想出的迂回解决方案是为每个键创建一个新列,该列将是一个整数,以便值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;
Run Code Online (Sandbox Code Playgroud)
这将创建一个表,虽然不是我想要的,但它很接近:
+--------+----+---------+
| grp | id | name …
Run Code Online (Sandbox Code Playgroud)