Что делает% в этом предложении 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кнопка) возвращает остаток. Это может быть весьма полезным инструментом, если вы используете цикл for для отображения данных и хотите подсчитывать столбцы - недавно я использовал оператор по модулю при составлении веб-страницы. Мой был в 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.