если подзапрос нулевого значения, возвращающий нуль - PullRequest
0 голосов
/ 29 января 2019

У меня есть запрос mysql:

select userid, sum(fees)
from table1
where userid in (
  select distinct userid
  from table2
  where condition1 = 2
  and condition2 =5
)
group by userid;

Теперь это работает, но если сумма (плата) равна нулю, у меня нет значения, даже если в подвыборке присутствует идентификатор пользователя.Есть ли способ получить правильный идентификатор пользователя (тот, что в подвыборке) и 0 как сумму, если нулевое значение в первом выборе возвращает ноль?

1, 100
2, 239
3, 0
4, 453
(in this case 3 is present in the subselect, but the sum is null

Ответы [ 4 ]

0 голосов
/ 29 января 2019

Я предполагаю, что вы не получаете строки для случая 3, поскольку в таблице нет строки для пользователя, поэтому вам нужно использовать внешнее соединение, что-то вроде

 select users.userid , coalesce(sum(fees),0) from
 (select distinct(userid) from table2
    where condition1 = 2
      and condition2 =5) users
 left outer join table1 on table1.userid = users.userid
 group by users.userid
0 голосов
/ 29 января 2019

Вы можете использовать это:

select userid, COALESCE(sum(fees), 0)
from table1
where userid in (
 select distinct userid
 from table2
 where condition1 = 2
 and condition2 =5
)
group by userid;

Согласно функции «вернуть первый параметр, если только он не равен нулю, в этом случае вернуть второй параметр» (0 в данном случае).

Подробнее о Coalesce здесь:

https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html#function_coalesce

Обновление:

select t1.userid, COALESCE(sum(t1.fees), 0)
from table2 t2 left outer     join table1 t1 on 
T2.userid = t1.userid

 where t2.condition1 = 2
 and t2.condition2 =5

 group by t1.userid;
0 голосов
/ 29 января 2019

Вы можете использовать COALESCE() или IF(isnull(fees), true, false).

Coalesce

Isnull ()

0 голосов
/ 29 января 2019

использовать функцию isnull.выберите идентификатор пользователя, сумму (isnull (гонорары, 0)) из таблицы 1, где идентификатор пользователя в (выберите отдельный идентификатор пользователя из таблицы 2, где условие 1 = 2 и условие 2 = 5) сгруппированы по идентификатору пользователя;

...