MySQL: Comment mettre à jour 50% des lignes, sélectionnées au hasard?
Je veux mettre à jour 50% des lignes dans une table, sélectionnés de manière aléatoire. Est-il possible de faire cela?
Edit: Juste pour préciser qu'il faut toujours mettre à jour 50% des dossiers, mais de ceux de 50% les lignes doivent être sélectionnés au hasard (pas seulement la partie supérieure de 50% par exemple). En d'autres termes, dans avarage, tous les autres documents doivent être mis à jour.
source d'informationauteur James
Vous devez vous connecter pour publier un commentaire.
Devrait fonctionner comme ça:
Yep, testé, fonctionne. Mais bien sûr, il n'est que de 50% des lignes en moyenne, pas exactement de 50%.
Comme écrit dans le SQL 92 de la spécification, de la
WHERE
clause doit être exécuté pour chaque tuple, de sorte que lerand()
doit être réévalué ce qui donne le résultat voulu (au lieu de la sélection de toutes les lignes).Extrait de la spécification (l'emphase est mienne):
Comme je l'ai dit, c'est un long chemin, décrit dans une sorte de pseudo-code. )
UPDATE table SET volumnvalue = x, OÙ RAND() <= 0.5
résultat sera très près de 50% des dossiers
RAND
doit être aléatoire et vous ne serez pas obtenir un solide percentile split.Il serait préférable d'utiliser le module opérateur
%
pour trouver toutes les X nombre d'éléments. Cela fonctionne mieux avec de l'unique colonne d'id comme Clé Primaire.Tenter l'exécution de cette requête, assurez-vous de spécifier le nom de votre table et de colonne id nom:
Sélectionnant tous les 2 rangs, divisible par 2
SELECT * from <your_table_name> where <id_column_name> %2=0
Sélectionnant tous les 6 rangs, divisible par 6
SELECT * from <your_table_name> where <id_column_name> %6=0
Une fois que vous lièvre heureux que la
SELECT
le résultat est bon, vous pouvez modifier la requête avec la mise à jour de la syntaxe pour mettre à jour les dossiers, en utilisant la mêmeWHERE
clause