Що робить% у цьому пункті WHERE?


13

Я тренуюсь, і один із сценаріїв має таку команду:

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

Мені хотілося б знати, для чого цей фрагмент у пункті WHERE: Col1 % 3 = 1

Я провів кілька досліджень в Інтернеті і не знайшов посилань на цю команду.

Відповіді:


32

Він використовується як оператор модуля; повертаючи решту числа, розділеного іншим.

У вашому прикладі пункт WHERE обмежує результати лише до тих, де значення Col1, розділене на 3, залишає залишок 1. (наприклад, 4,7,10 тощо)



6

% у SQL може використовуватися у двох різних форматах. Якщо він використовується в рядку з, LIKEто це, наприклад, макіяж:

WHERE col_name like '%test%'

Це означало б знайти все, в col_nameчому є слово "тест".

Але в цій конкретній операції символ% використовується як оператор модуля. Modulo (на калькуляторі, який зазвичай відображається як MODкнопка) повертає решту. Це може бути досить корисним інструментом, якщо ви використовуєте цикл для відображення даних і хочете підраховувати стовпці - я нещодавно використовував оператор модуля при складанні веб-сторінки. Моя була в PHP, але це приклад:

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

В основному це буде виводити 1 - 100, і кожен три елементи виводитимуть "Три елементи", а кожен десять елементів виводить "Десять предметів", тому що будь-які інші числа повертають значення, наприклад:

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, а не 6 .. модуль повертає решту, коли число, на яке ви ділите, більше, ніж число, яке ви ділите. Кінцевий знак ділення на десятковий не має жодного відношення до виходу мод.
Нік Дьюїтт

і select 5 / 10 ;дасть 0у SQL, не0.5
ypercubeᵀᴹ

2

Інші відповіді правильні. Це модуль оператора, який повертає решту поділу.

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

Але я думаю, що може бути корисним додати ЧОМУ це відповідна операція, І ЧОМУ це може бути корисно іноді.

X % 2Є найбільш широко використовуваним, тому що вона повертає , якщо число парних або непарних.

Уявіть, що ви хочете вибрати всі стовпці з парними номерами, ви можете зробити:

SELECT * FROM table WHERE column % 2 = 0

Якщо ви хочете вибрати всі стовпці з непарними номерами, ви можете зробити:

SELECT * FROM table WHERE column % 2 = 1

Можуть виникнути й інші випадки використання, наприклад, ви хочете відфільтрувати всі стовпці за їх одиницею. Ви можете використовувати це для отримання всіх чисел, що мають нулі у своїх одиницях:

SELECT * FROM table WHERE column % 10 = 0
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.