Sql остаток от деления: (Остаток от деления) (Entity SQL) — ADO.NET

Функция MOD — остаток от деления

Функция MOD находит остаток от деления
одного числа на другое. Вместо MOD можно
использовать операцию %, которая делает то
же самое.

Синтаксис

Функция MOD:

SELECT MOD(что_делить, на_что_делить) FROM имя_таблицы WHERE условие

Альтернативный синтаксис с %:

SELECT что_делить % на_что_делить FROM имя_таблицы WHERE условие

Таблицы для примеров

таблица numbers
id
айди
number
число
110
28
311

Пример

В данном примере находится остаток от деления
столбца number на 3:

SELECT *, MOD(number, 3) as mod FROM numbers

Результат выполнения кода:

id
айди
number
число
mod
остаток от деления
1101
282
3112

Запрос можно переписать следующим образом:

SELECT id, number % 3 as mod FROM numbers

Меняем таблицу для примеров

таблица numbers
id
айди
number1
число1
number2
число2
1103
285
3144

Пример

В данном примере находится остаток от деления
столбца number1 на number2:

SELECT *, MOD(number1, number2) as mod FROM numbers

Результат выполнения кода:

id
айди
number1
число1
number2
число2
mod
остаток от деления
11031
2853
31442

Запрос можно переписать следующим образом:

SELECT *, number1 % number2 as mod FROM numbers

Пример

Давайте выберем только те записи, в которых
остаток от деления первого числа на второе
меньше или равен двум (это будут 1
и 3-я записи):

SELECT * FROM numbers WHERE MOD(number1, number2)<=2

Результат выполнения кода:

id
айди
number1
число1
number2
число2
1103
3144

Запрос можно переписать следующим образом:

SELECT * FROM numbers WHERE number1 % number2 <= 2

Математические функции и операторы | PostgreSQL

Начальная страница

Математические операторы предоставляются для многих типов
PostgreSQL. 3.08 |/квадратный корень|/ 25.05 ||/кубический корень||/ 27.03 !факториал5 !120 !!факториал (префиксный оператор)!! 5120 @значение по модулю@ -5.05 &битовое AND91 & 1511 |битовое OR32 | 335 #битовое XOR17 # 520 ~битовое NOT~1-2 <<битовый сдвиг влево1 << 416 >>битовый сдвиг вправо8 >> 22

Битовые операторы работают только для целых типов данных,
в то время как другие операторы доступны для всех числовых
типов данных. Битовые операторы также доступны для типов
битовых строк bit и bit varying,
как показоно в Table 9-10.

Table 9-3 показывает доступные
математические функции. В этой таблице, dp
означает тип данных double precision. Многие из
этих функций предоставляются в нескольких формах с разными
типами аргументов. Кроме особых случае, любые представленные
формы какой-либо функции возвращают тот же тип данных, что
и её аргумент. Функции работающие с данными типа double
precision в основном реализованы с помощью системных
библиотечных функций языка C; таким образом их точность и
поведение могут отличаться в зависимости от операционной системы.

Table 9-3. Математические функции

ФункцияВозвращаемый типОписаниеПримерРезультат
abs(x)(такой же как у аргумента)значение по модулюabs(-17. 4)17.4
cbrt(dp)dpкубический кореньcbrt(27.0)3
ceil(dp or numeric)(такой же как у аргумента)округление до целого в меньшую сторонуceil(-42.8)-42
ceiling(dp or numeric)(такой же как у аргумента)округление до целого в меньшую сторону (псевдоним для ceil)ceiling(-95.3)-95
degrees(dp)dpрадианты в градусыdegrees(0.5)28.6478897565412
div(y numeric,
x numeric)
numericцелый множитель y/xdiv(9,4)2
exp(dp or numeric)(такой же как у аргумента)экспонентаexp(1. 0)2.71828182845905
floor(dp or numeric)(такой же как у аргумента)округление до целого в большую сторонуfloor(-42.8)-43
ln(dp or numeric)(такой же как у аргумента)натуральный логарифмln(2.0)0.693147180559945
log(dp or numeric)(такой же как у аргумента)десятичный логарифмlog(100.0)2
log(b numeric,
x numeric)
numericлогарифм по базе blog(2.0, 64.0)6.0000000000
mod(y,
x)
(такой же как у аргументов)остаток от деления y/xmod(9,4)1
pi()dp«π» constantpi()3.14159265358979
power(a dp,
b dp)
dpa возведённое в степень bpower(9. 0, 3.0)729
power(a numeric,
b numeric)
numerica возведённое в степень bpower(9.0, 3.0)729
radians(dp)dpградусы в радианыradians(45.0)0.785398163397448
random()dpслучайное значение в диапазоне 0.0 <= x < 1.0random() 
round(dp или numeric)(такой же как у аргумента)округление до ближайшего целогоround(42.4)42
round(v numeric, s int)numericокругление до s десятичных разрядовround(42.4382, 2)42.44
setseed(dp)voidустановить начало последовательности для вызовов random() (значением между -1.0 и
1. 0, inclusive)
setseed(0.54823) 
sign(dp or numeric)(такой же как у аргумента)знак аргумента (-1, 0, +1)sign(-8.4)-1
sqrt(dp или numeric)(такой же как у аргумента)квадратный кореньsqrt(2.0)1.4142135623731
trunc(dp или numeric)(такой же как у аргумента)усечение дробной частиtrunc(42.8)42
trunc(v numeric, s int)numericусечение до s десятичных разрядовtrunc(42.4382, 2)42.43
width_bucket(op numeric, b1 numeric, b2 numeric, count int)intreturn the bucket to which operand would
be assigned in an equidepth histogram with count
buckets, in the range b1 to b2
width_bucket(5. 35, 0.024, 10.06, 5)3
width_bucket(op dp, b1 dp, b2 dp, count int)intreturn the bucket to which operand would
be assigned in an equidepth histogram with count
buckets, in the range b1 to b2
width_bucket(5.35, 0.024, 10.06, 5)3

В заключение, Table 9-4 показывает
доступные тригонометрические функции. Все тригонометрические функции
принимают аргументы и возвращают значение типа double
precision. Аргументы тригонометрических функций выражаются в
радианах. Обратные функции возвращают значения выражаемые в радианах.
См. выше функции преобразования элементов
radians() и
degrees().

Table 9-4. Тригонометрические функции

ФункцияОписание
acos(x)арккосинус
asin(x)арксинус
atan(x)арктангенс
atan2(y,
x)
арктангенс
y/x
cos(x)косинус
cot(x)котангенс
sin(x)синус
tan(x)тангенс

Back to top

sql — В чем разница между MOD и REMAINDER в оракуле?

На этот вопрос уже давно есть ответ, но я подумал, что некоторый контекст будет полезен.

https://en.wikipedia.org/wiki/Modulo_operation обсуждает операцию «по модулю» и тот факт, что она основана на остатке после целочисленного деления. Проблема в том, что понятие «остаток» четко не определено там, где есть отрицательные числа.

Когда используются отрицательные числа, разница между модулем и остатком значительна. Математически операция модуля отображает целое число в диапазон. Этот диапазон начинается с 0 и является циклическим. Например integer mod 3 отображается в диапазоне:

 0, 1, 2, 0, 1, 2, …
 

Если заданное целое число отрицательное, цикл просто продолжается в обратном направлении. Если же сам модуль отрицателен, то весь диапазон отрицателен:

 0, -2, -1, 0, -2, -1, …
 

https://rob.conery.io/2018/08/21/mod-and-remainder-are-not-the-same/ иллюстрирует это как часы с отрицательными числами.

Практический результат состоит в том, что знак второго числа совпадает со знаком результата.

Однако с остатком вы пытаетесь разделить второе число на первое до тех пор, пока не сможете больше продолжать. Оставшаяся разница называется остатком. Если первое число отрицательное, то, если вы остановитесь, остаток будет отрицательным.

Практический вывод из этого состоит в том, что знак первого числа является знаком результата.

Большинство языков программирования, включая большинство разновидностей SQL, используют вычисление остатка, но очень часто называют его модулем. И в большинстве языков используется обозначение a % b означает a mod b .

Oracle, конечно же, имеет две функции, которые должны были быть полезными. Однако первая функция, mod() , на самом деле дает то, что все остальные называют остальными. Второй, остаток() , дает результат, который больше никто не дает, из-за того, что он ориентирован на ближайшее деление. Согласно документации, функции mod() используют функцию floor() , а 0008 использует round() .

Если вы хотите сравнить результаты, вы можете попробовать:

 ВЫБЕРИТЕ
    остаток(19,5) AS "Остаток ++",
    остаток(-19,5) AS "Остаток -+",
    остаток(19,-5) AS "Остаток +-",
    остаток(-19,-5) AS "Остаток --",
    мод(19,5) КАК "Мод++",
    мод(-19,5) КАК "Мод -+",
    мод(19,-5) КАК "Мод +-",
    мод(-19,-5) КАК "Мод --",
    мод(мод(19,5) + 5,5) КАК "Модуль ++",
    mod(mod(-19,5) + 5,5) AS "Модуль ++",
    mod(mod(19,-5) + -5,-5) КАК "Модуль ++",
    мод(мод(-19,-5) + -5,-5) АС "По модулю ++"
ОТ ДВОЙНОГО
;
 

Вычисление по модулю дает истинный модуль, согласно https://developer. mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Remainder

В общем, вам, вероятно, нужен остаток как наиболее естественную интерпретацию, поэтому вы будете использовать mod() , чтобы получить этот результат.

сервер sql - остаток целочисленного деления SQL

спросил

Изменено
9 лет, 6 месяцев назад

Просмотрено
1к раз

Вот моя ситуация: Скажем, у меня есть 7 шляп.

 Шапки месяца
1 7
 

В моем операторе выбора мне нужно разделить это на 3, и я не могу иметь частичные шляпы. Я хочу иметь 3 записи со следующими значениями:

 Week Hats
1 2
2 2
3 3
 

При обычном округлении я бы получил

 Недельные шляпы
1 2
2 2
3 2
 

Я не могу получить это, потому что я только что потерял шляпу. Как передать остаток от частного одной записи (мне все равно, какой записи)?

  • sql
  • sql-сервер

4

Интересная задача. Вы можете сделать это, используя только SQL. Идея состоит в том, чтобы выделить количество шляп как целое число. Затем добавляйте по одной шляпе каждую неделю, пока не наберете необходимое количество.

Вот запрос, который выполняет это для данных, которые вы предложили:

 с неделями как (
      выберите 1 как w объединение всех выберите 2 объединение всех выберите 3
     ),
     константа как (
      выберите 7 как numhats,
             (выберите количество (*) из недель) как numweeks
     )
выберите ж,
       ((numhats / numweeks) +
        (случай, когда row_number() больше (порядок по w) <= numhats % numweeks
              затем 1
              иначе 0
         конец)
       ) как шапки
от недели крест присоединиться
     константа;
 

Обратите внимание, что это помещает дополнительные шляпы в первые недели, а не в последние недели. Вы можете поместить их в последние недели, используя порядок по w desc вместо порядка по w .

Для решения этой проблемы вам необходима дополнительная информация. Отследите исходную сумму и найдите сумму выделенных

 Week HatNum HatColor OrigTotal SumWeekHats RowID
1 2 Синий 7 6 1
2 2 Синий 7 6 2
3 2 Синий 7 6 3
1 2 Красный 7 6 1
2 2 Красный 7 6 2
3 2 Красный 7 6 3
 

Затем обновите номер шляпы (для 1 строки на группу) на основе того, что не было выделено

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.