0
votes

Enregistrement aléatoire de la table

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.

Permettez Supprimer la table des clients contenant 10000 enregistrements totals. Mais les clients distincts ne sont que 500.

Donc, je n'ai besoin que de 500 données de client distinctes au hasard.

J'utilise MySQL 5.7.


2 commentaires

Vous allez devoir nous donner un exemple basé sur SQL ici. Pourquoi ne pouvez-vous pas simplement choisir un rand () dossier client?


En 5.7, c'est étonnamment délicat


3 Réponses :


-2
votes

Pas sûr de cela, mais c'est une requête de niveau débutant qui pourrait obtenir le résultat souhaité

Sélectionnez une colonne distincte de la table Ordre by rand () Limite 500

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


0 commentaires

0
votes

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


0 commentaires

0
votes

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 |
+----+-------------+


0 commentaires