Sql остаток от деления: (Остаток от деления) (Entity SQL) — ADO.NET
Содержание
Функция MOD — остаток от деления
Функция MOD
находит остаток от деления
одного числа на другое. Вместо MOD можно
использовать операцию %, которая делает то
же самое.
Синтаксис
Функция MOD
:
SELECT MOD(что_делить, на_что_делить) FROM имя_таблицы WHERE условие
Альтернативный синтаксис с %:
SELECT что_делить % на_что_делить FROM имя_таблицы WHERE условие
Таблицы для примеров
id айди | number число |
---|---|
1 | 10 |
2 | 8 |
3 | 11 |
Пример
В данном примере находится остаток от деления
столбца number на 3
:
SELECT *, MOD(number, 3) as mod FROM numbers
Результат выполнения кода:
id айди | number число | mod остаток от деления |
---|---|---|
1 | 10 | 1 |
2 | 8 | 2 |
3 | 11 | 2 |
Запрос можно переписать следующим образом:
SELECT id, number % 3 as mod FROM numbers
Меняем таблицу для примеров
id айди | number1 число1 | number2 число2 |
---|---|---|
1 | 10 | 3 |
2 | 8 | 5 |
3 | 14 | 4 |
Пример
В данном примере находится остаток от деления
столбца number1 на number2:
SELECT *, MOD(number1, number2) as mod FROM numbers
Результат выполнения кода:
id айди | number1 число1 | number2 число2 | mod остаток от деления |
---|---|---|---|
1 | 10 | 3 | 1 |
2 | 8 | 5 | 3 |
3 | 14 | 4 | 2 |
Запрос можно переписать следующим образом:
SELECT *, number1 % number2 as mod FROM numbers
Пример
Давайте выберем только те записи, в которых
остаток от деления первого числа на второе
меньше или равен двум (это будут 1
-я
и 3
-я записи):
SELECT * FROM numbers WHERE MOD(number1, number2)<=2
Результат выполнения кода:
id айди | number1 число1 | number2 число2 |
---|---|---|
1 | 10 | 3 |
3 | 14 | 4 |
Запрос можно переписать следующим образом:
SELECT * FROM numbers WHERE number1 % number2 <= 2
Математические функции и операторы | PostgreSQL
Начальная страница
Математические операторы предоставляются для многих типов
PostgreSQL. 3.0
Битовые операторы работают только для целых типов данных,
в то время как другие операторы доступны для всех числовых
типов данных. Битовые операторы также доступны для типов
битовых строк 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, | numeric | целый множитель y/x | div(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, | numeric | логарифм по базе b | log(2.0, 64.0) | 6.0000000000 |
mod(y, | (такой же как у аргументов) | остаток от деления y/x | mod(9,4) | 1 |
pi() | dp | «π» constant | pi() | 3.14159265358979 |
power(a dp, | dp | a возведённое в степень b | power(9. 0, 3.0) | 729 |
power(a numeric, | numeric | a возведённое в степень b | power(9.0, 3.0) | 729 |
radians(dp) | dp | градусы в радианы | radians(45.0) | 0.785398163397448 |
random() | dp | случайное значение в диапазоне 0.0 <= x < 1.0 | random() | |
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) | int | return 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) | int | return 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, | арктангенс 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
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.