J'ai une table qui contient plusieurs clés dans d'autres tables (où chaque clé est composée de plusieurs colonnes). Je voudrais pouvoir regrouper des lignes qui ont une clé égale, mais je ne veux pas les regrouper toutes ensemble. Ce n'est pas simple GROUP BY
sur la clé, mais je veux plutôt pouvoir faire des groupes de disons 10. Donc, si une clé particulière apparaissait 50 fois, j'obtiendrais 5 résultats lorsque je fais ce regroupement (5 groupes de 10). Je souhaite également que ce regroupement se fasse de manière aléatoire dans la clé.
Je ne connaissais pas la façon directe de le faire, et la méthode du rond-point que j'ai trouvée ne fonctionne pas comme je le pense. La solution de rond-point que j'ai trouvée était de créer une nouvelle colonne pour chaque clé qui serait un entier tel que la valeur i
représente l' ith
occurrence de cette clé (mais dans un ordre aléatoire). Je pourrais alors faire une division entière afin que toutes les n (disons 10) lignes de la clé aient la même valeur, et je pourrais faire un GROUP BY
sur cette valeur.
Existe-t-il un moyen plus direct d'accomplir ce que je viens de décrire? C'est assez gênant et j'ai rencontré des problèmes lors de la création de la nouvelle colonne d'index (comme je l'ai décrit dans cette question ).
EDIT: Tout d'abord, notez que c'est pour MySQL. J'ajouterai un exemple au cas où mon objectif ne serait pas clair. Les documents MySQL montrent une méthode pour y arriver presque :
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;
Cela crée une table qui, bien que ce n'est pas ce que je veux, se rapproche:
+--------+----+---------+
| grp | id | name |
+--------+----+---------+
| fish | 1 | lax |
| mammal | 1 | dog |
| mammal | 2 | cat |
| mammal | 3 | whale |
| bird | 1 | penguin |
| bird | 2 | ostrich |
+--------+----+---------+
Je voudrais essentiellement GROUP BY
id, sauf que je voudrais que les enregistrements avec mammal
aient un "groupe" pour les ID 1-10, un autre "groupe" pour les ID 11-20, etc. Cependant, je le ferais avec une table existante, et je ne voudrais pas nécessairement que "dog" apparaisse avec l'ID 1. Je voudrais que cet ordre initial soit aléatoire, mais ensuite déterministe.
numMammal
. Je ne me soucie pas vraiment de ce que l'ID dog
obtient, mais je ne veux pas que cela dépende de l'ordre d'insertion d'origine.
GROUP BY
. Je pourrais alors vouloir jumeler des groupes de 10 pour trouver la corrélation entre la moyenne. J'ai besoin de cet ordre aléatoire, car si l'ordre d'insertion d'origine était trié en fonction du poids, cela me donnerait de mauvais résultats. J'espère que j'ai du sens.
I would want that initial ordering to be random, but then deterministic from then out.
<- dites quoi? Je pense que peu importe ce que vous ferez, vous devrez mettre les enregistrements dans un deuxième tableau. Comment fonctionne précisément cette logique métier? En l'état, il n'y a rien à exiger (par exemple) que le chien passe en premier. Et que voulez-vous dire parI would want the records from *mammal* to have one "group" for IDs 1-10, and another for IDs 11-20
... pouvez-vous illustrer cela avec un autre tableau, axé sur les mammifères, dans la description de la question ci-dessus?