¿Qué hace% en esta cláusula WHERE?


13

Estoy entrenando y uno de los scripts tiene el siguiente comando:

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

Me gustaría saber para qué sirve este fragmento en la cláusula WHERE: Col1 % 3 = 1

Investigué un poco en Internet y no encontré referencias sobre este comando.

Respuestas:


32

Se está utilizando como operador de módulo; devolviendo el resto de un número dividido por otro.

En su ejemplo, la cláusula WHERE limita los resultados solo a aquellos en los que el valor Col1 dividido por 3 deja un resto de 1. (por ejemplo, 4,7,10, etc.)



6

% en SQL se puede usar en dos formatos diferentes. Si se usa en una cadena con, LIKEentonces es un comodín, por ejemplo:

WHERE col_name like '%test%'

Eso significaría encontrar todo lo col_nameque tiene la palabra "prueba".

Pero en esta operación específica, el símbolo% se está utilizando como operador de módulo. El módulo (en una calculadora que normalmente se muestra como MODbotón) devuelve el resto. Puede ser una herramienta bastante útil si usa un bucle for para mostrar datos y desea contar columnas: recientemente he usado el operador de módulo al diseñar una página web. El mío estaba en PHP, pero este es un ejemplo:

$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++ ;
}

Básicamente, esto generaría 1 - 100 y cada tres elementos generaría "Tres elementos", y cada diez elementos generaría "Diez elementos" porque cualquier otro número devolvería un valor, por ejemplo:

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)

2
2% 3 = 2, no 6 .. el módulo devuelve el resto cuando el número por el que está dividiendo es mayor que el número que está dividiendo. El decimal final de la división por decimal no tiene relación con la salida de mod.
Nick Dewitt

y select 5 / 10 ;dará 0en SQL, no0.5
ypercubeᵀᴹ

2

Las otras respuestas son correctas. Es el operador de módulo, que devuelve el resto de la división.

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

Pero creo que podría ser útil agregar POR QUÉ es una operación relevante y POR QUÉ puede ser útil a veces.

El X % 2es el más utilizado porque devuelve si el número es par o impar.

Imagine que desea seleccionar todas las columnas con números pares, puede hacer:

SELECT * FROM table WHERE column % 2 = 0

Si desea seleccionar todas las columnas con números impares, puede hacer:

SELECT * FROM table WHERE column % 2 = 1

Pueden surgir otros casos de uso, por ejemplo, si desea filtrar todas las columnas por su unidad, puede usar esto para obtener todos los números que tienen cero en sus unidades:

SELECT * FROM table WHERE column % 10 = 0
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.