Que fait% dans cette clause WHERE?

13

Je fais de la formation et l'un des scripts a la commande suivante:

SELECT SUM(Col2) FROM clust_table WHERE Col1 % 3 = 1

Je voudrais savoir à quoi sert cet extrait dans la clause WHERE: Col1 % 3 = 1

J'ai fait quelques recherches sur Internet et je n'ai trouvé aucune référence à propos de cette commande.

Rafaells
la source

Réponses:

32

Il est utilisé comme opérateur Modulo; renvoyant le reste d'un nombre divisé par un autre.

Dans votre exemple, la clause WHERE limite les résultats uniquement à ceux où la valeur Col1 divisée par 3 laisse un reste de 1. (par exemple 4,7,10, etc.)

A. Folken
la source
25

C'est l' opérateur Modulo .

Renvoie le reste d'un nombre divisé par un autre.

Erik Darling
la source
6

% en SQL peut être utilisé dans deux formats différents. S'il est utilisé dans une chaîne avec, LIKEc'est un caractère générique, par exemple:

WHERE col_name like '%test%'

Cela signifierait trouver tout ce col_namequi contient le mot «test».

Mais dans cette opération spécifique, le symbole% est utilisé comme opérateur modulo. Modulo (sur une calculatrice normalement représentée par un MODbouton) renvoie le reste. Cela peut être un outil très utile si vous utilisez une boucle for pour afficher des données et que vous souhaitez compter les colonnes - J'ai récemment utilisé l'opérateur modulo lors de la création d'une page Web. Le mien était en PHP, mais voici un exemple:

$count = 0 ;
$records = array () ;
for ( $a = 0 ; $a < 100 ; $a++ )
    $records[$a] = $a ;
foreach ( $records as $record )
{
    if ( $count % 3 == 0 )
        echo '<p>Three items</p>' ;
    if ( $count % 10 == 0 )
        echo '<p>Ten items</p>' ;
    echo '<p>'.$record.'</p>' ;
    $count++ ;
}

Cela produirait essentiellement 1 à 100 et tous les trois éléments, il produirait "Trois éléments", et tous les dix éléments, il produirait "Dix éléments", car tout autre nombre renverrait une valeur, par exemple:

5 / 10 = 0.5 (5 % 10 = 5)
2 / 3 = 0.666... (2 % 3 = 2)
50 / 10 = 5.0 (50 % 10 = 0)
9 / 3 = 3.0 (9 % 3 = 0)
TheKLF99
la source
2
2% 3 = 2, pas 6 .. modulo renvoie le reste lorsque le nombre que vous divisez est plus grand que le nombre que vous divisez. La décimale de fin de la division par décimale n'a aucune incidence sur la sortie du mod.
Nick Dewitt
et select 5 / 10 ;donnera 0en SQL, pas0.5
ypercubeᵀᴹ
2

Les autres réponses sont correctes. C'est l'opérateur modulo, qui renvoie le reste de la division.

  • 0% 3 = 0
  • 1% 3 = 1
  • 2% 3 = 2
  • 3% 3 = 0
  • 4% 3 = 1
  • 5% 3 = 2
  • ...

Mais je pense qu'il pourrait être utile d'ajouter POURQUOI c'est une opération pertinente et POURQUOI cela pourrait être utile parfois.

Le X % 2est le plus utilisé car il renvoie si le nombre est pair ou impair.

Imaginez que vous souhaitez sélectionner toutes les colonnes avec des nombres pairs, vous pouvez faire:

SELECT * FROM table WHERE column % 2 = 0

Si vous souhaitez sélectionner toutes les colonnes avec des nombres impairs, vous pouvez faire:

SELECT * FROM table WHERE column % 2 = 1

D'autres cas d'utilisation peuvent survenir, par exemple, vous souhaitez filtrer toutes les colonnes par leur unité, vous pouvez l'utiliser pour obtenir tous les nombres qui ont zéro dans leurs unités:

SELECT * FROM table WHERE column % 10 = 0
Edu
la source