Добавление +1 к запросу, чтобы обойти ошибки «деление на ноль» - PullRequest
0 голосов
/ 29 марта 2012

Рассмотрим следующую таблицу "users":

uid  followers  following  ff_fraction
--------------------------------------
1    40         2          20
2    10         3           3
3     0         2           0
4     5         0           5
5    77         2
6     9         3

Я хочу рассчитать для каждого пользователя долю подписчиков / подписчиков, округленную до целого числа. Я заполнил таблицу для первых 4 пользователей:

  1. 40/2 = 20
  2. 10/3 = 3.3333 => округлено 3
  3. 0/2 = 0
  4. 5/0 => это даст ошибку, поэтому я посчитал +1, сделав 5/1 = 5

Теперь у меня есть следующий запрос, но он не учитывает, что «следующим» является ноль (и что, таким образом, ему придется добавить 1, чтобы не получить отклонение от нуля):

UPDATE users SET ff_fraction = ROUND(followers/following)

Возможно ли решить это в запросе MySQL?

Ответы [ 4 ]

2 голосов
/ 29 марта 2012

Вы можете использовать выражение case, чтобы вообще обойти деление:

update users
set ff_fraction =
  case following when 0 then followers else round(followers/following) end
2 голосов
/ 29 марта 2012
UPDATE users SET ff_fraction = ROUND(followers / GREATEST(following, 1))

GREATEST сделает так, чтобы это никогда не опускалось ниже 1.

1 голос
/ 29 марта 2012

Вы можете сделать следующее:

UPDATE users SET ff_fraction = ROUND(followers/if(following>0,following,1))
0 голосов
/ 29 марта 2012
UPDATE users 
SET ff_fraction = if(following = 0, followers, ROUND(followers/following))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...