J'ai une table client avec 10 colonnes. Dans le tableau ID client est répété. Je dois prendre un seul disque à chaque client mais au hasard. P>
Permettez Supprimer la table des clients contenant 10000 enregistrements totals. Mais les clients distincts ne sont que 500. P>
Donc, je n'ai besoin que de 500 données de client distinctes au hasard. p>
J'utilise MySQL 5.7. p>
3 Réponses :
Pas sûr de cela, mais c'est une requête de niveau débutant qui pourrait obtenir le résultat souhaité p>
Sélectionnez une colonne distincte de la table Ordre by rand () Limite 500 P>
PS: Ce code n'est pas dans MySQL 5.7. Et si quelqu'un a une meilleure interrogation plus que heureuse d'être corrigée p>
Vous ne voulez pas commander par RAND () car cela sera extrêmement lent pour une grande table, car il triera réellement tous ces enregistrements aléatoires.
choisir un aléatoire contre moins que le nombre de lignes dans le table (random_num_less_than_row_count) et faites ceci qui est plus rapide mais pas parfaite mais pas parfaite. p>
SELECT * FROM atable WHERE id >= $random_num_less_than_last_id ORDER BY id ASC LIMIT 1
Considérons les suivants ...
SELECT * FROM my_table; +----+-------------+ | id | customer_id | +----+-------------+ | 1 | 1 | | 2 | 1 | | 3 | 3 | | 4 | 5 | | 5 | 3 | | 6 | 2 | | 7 | 1 | | 8 | 4 | | 9 | 5 | | 10 | 2 | | 11 | 3 | | 12 | 1 | | 13 | 4 | +----+-------------+ SELECT id , customer_id FROM ( SELECT id , customer_id , CASE WHEN @prev=customer_id THEN @i:=@i+1 ELSE @i:=1 END i , @prev:=customer_id FROM ( SELECT id , customer_id FROM my_table ORDER BY customer_id , RAND() ) x JOIN (SELECT @prev:=null,@i:=0) vars ) n WHERE i = 1 ORDER BY customer_id; -- sample output, different each time -- +----+-------------+ | id | customer_id | +----+-------------+ | 12 | 1 | | 10 | 2 | | 3 | 3 | | 8 | 4 | | 9 | 5 | +----+-------------+
Vous allez devoir nous donner un exemple basé sur SQL ici. Pourquoi ne pouvez-vous pas simplement choisir un
rand () code> dossier client?
En 5.7, c'est étonnamment délicat