Ho una tabella che contiene diverse chiavi in altre tabelle (in cui ogni chiave è composta da più colonne). Vorrei poter raggruppare le righe che hanno una chiave uguale, ma non voglio raggrupparle tutte insieme. Non è semplice GROUP BY
sulla chiave, ma piuttosto voglio essere in grado di creare gruppi di dire 10. Quindi se una particolare chiave si presentasse 50 volte otterrei 5 risultati quando faccio questo raggruppamento (5 gruppi di 10). Voglio anche che questo raggruppamento avvenga casualmente all'interno della chiave.
Non conoscevo il modo diretto per farlo, e il metodo della rotonda che mi è venuto in mente non funziona come penso che dovrebbe. La soluzione rotonda che ho trovato è stata quella di creare una nuova colonna per ogni chiave che fosse un numero intero tale che il valore i
rappresenti il ith
verificarsi di quella chiave (ma in ordine casuale). Potrei quindi fare una divisione intera in modo che ogni n (diciamo 10) righe all'interno della chiave abbia lo stesso valore, e potrei fare una GROUP BY
su quel valore.
C'è un modo più diretto per realizzare ciò che ho appena descritto? È piuttosto imbarazzante e ho riscontrato problemi nella creazione della nuova colonna dell'indice (come ho descritto in questa domanda ).
EDIT: Prima di tutto nota che questo è per MySQL. Aggiungerò un esempio nel caso in cui il mio obiettivo non fosse chiaro. I documenti MySQL mostrano un metodo per arrivarci quasi :
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;
Questo crea una tabella che, sebbene non sia ciò che voglio, si avvicina:
+--------+----+---------+
| grp | id | name |
+--------+----+---------+
| fish | 1 | lax |
| mammal | 1 | dog |
| mammal | 2 | cat |
| mammal | 3 | whale |
| bird | 1 | penguin |
| bird | 2 | ostrich |
+--------+----+---------+
Vorrei essenzialmente GROUP BY
id, tranne che vorrei che i record mammal
avessero un "gruppo" per gli ID 1-10, un altro "gruppo" per gli ID 11-20, ecc. Tuttavia, lo farei con una tabella esistente, e non vorrei necessariamente che "dog" si presentasse con ID 1. Vorrei che l'ordinamento iniziale fosse casuale, ma poi deterministico da allora in poi.
numMammal
. Non mi interessa davvero quale ID dog
ottenga, ma non voglio che dipenda dall'ordine di inserimento originale.
GROUP BY
. Potrei quindi voler accoppiare gruppi di 10 per trovare la correlazione tra la media. Ho bisogno di questo ordinamento casuale perché se l'ordine di inserzione originale fosse ordinato in base al peso, questo mi darebbe i risultati sbagliati. Spero di avere un senso.
I would want that initial ordering to be random, but then deterministic from then out.
<- dire cosa? Penso che qualunque cosa tu faccia, dovrai mettere i record in una seconda tabella di qualche tipo. Come funziona esattamente questa logica aziendale? Poiché non c'è nulla da richiedere (ad esempio) al cane di venire prima. E cosa intendi conI would want the records from *mammal* to have one "group" for IDs 1-10, and another for IDs 11-20
... puoi illustrarlo con un'altra tabella, concentrandoti sui mammiferi, nella descrizione della domanda sopra?