Как отфильтровать целое число с указанием c чисел в sql - PullRequest
0 голосов
/ 20 марта 2020

Итак, в одном из моих заданий они хотели, чтобы я перебрал числа, заканчивающиеся на «00» для запросов. Это означает отсутствие «00» в середине, только в конце.

Например: 100, 200, 300 и т. Д. c. Вот как я хочу, чтобы это вышло.

Проблема в том, что я понятия не имею, как это сделать. Я попытался преобразовать его в строку с помощью CASE и CONVERT, но вместо этого он дает мне ошибку. Должен ли я сначала преобразовать его в «Выбрать», а затем отсортировать позже, или все это должно произойти одновременно?

Или у вас есть какое-нибудь лучшее предложение?

Это некоторые из моих попыток делать это.

SELECT name, SUM(count) AS freq
FROM [baby.baby_names]
WHERE gender = 'M' AND year < 2010 AND freq like '%[00]'
GROUP BY name
ORDER BY freq DESC;

Спасибо за ваше время.

Ответы [ 2 ]

0 голосов
/ 20 марта 2020

freq рассчитывается в запросе агрегации, поэтому вам нужно having. Это число, поэтому используйте арифметику c вместо строковых операций - подходящим является оператор по модулю, который обычно использует %:

SELECT name, SUM(count) AS freq
FROM [baby.baby_names]
WHERE gender = 'M' AND year < 2010
GROUP BY name
HAVING freq % 100 = 0
ORDER BY freq DESC;

В некоторых базах данных вместо этого используется функция mod() : mod(freq, 100) = 0.

0 голосов
/ 20 марта 2020

Проверка, заканчивается ли число двумя нулями, эквивалентна проверке, является ли оно кратным 100. Таким образом, вы можете просто использовать оператор по модулю:

where freq % 100 = 0

Некоторые базы данных не поддерживают % и хочу mod() вместо:

where mod(freq, 100) = 0
...