Возврат 0 записей значения, если запись не существует с уникальным идентификатором в Mysql - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть две таблицы: Verified_users и cfw_documents. Я не хотел показывать ни одного документа, загруженного каждым пользователем за каждый месяц.

Я попробовал ниже запрос-

SELECT  a.user_id,count(distinct d.db_filename), MONTH(d.doc_date) as upload_month
FROM verified_users a
join cfw_documents d on a.user_id=d.user_id and d.doc_date >= a.created_on
GROUP BY 1,3 ORDER BY 1;

Я получил вывод как:

user_ id   count      month
1          15         3    
1          20         6    
2          5          1    
2          1          4

Для каждого пользователя отсутствуют месяцы, в которые пользователь не загружал записи. Я хотел показать такие месяцы со счетом 0.

Ожидаемый результат:

user_ id   count      month
1          15         3
1           0         4 
1           0         5 
1          20         6
1           0         7
1           0         8
1           0         9    
2           5         1
2           0         2
2           0         3 
2           1         4
2           0         5
2           0         6

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

1 Ответ

0 голосов
/ 04 сентября 2018

Вы должны использовать список для месяца и левого соединения (или использовать таблицу для номера месяца)

  SELECT  a.user_id, ifnull(count(distinct d.db_filename), 0), t.month  as upload_month
  FROM (

    select  1  month from dual 
    union
    select  2  from dual 
    union
    select  3  from dual 
    union
    select  4  from dual 
    union
    select  5  from dual 
    union
    select  6  from dual 
    union
    select  7  from dual 
    union
    select  8  from dual 
    union
    select  9  from dual 
    union
    select  10  from dual 
    union
    select  11  from dual 
    union
    select  12  from dual 

  ) t 
  left join user_documents a on t.month = MONTH(d.doc_date)
  join  cfw_documents d on a.user_id=d.user_id and d.doc_date >= a.created_on
  GROUP BY 1,3 ORDER BY 1;

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

      SELECT  a.user_id, ifnull(count(distinct d.db_filename), 0), t.month  as upload_month
      FROM (

        select  1  month from dual 
        union
        select  2  from dual 
        union
        select  3  from dual 
        union
        select  4  from dual 
        union
        select  5  from dual 
        union
        select  6  from dual 
        union
        select  7  from dual 
        union
        select  8  from dual 
        union
        select  9  from dual 
        union
        select  10  from dual 
        union
        select  11  from dual 
        union
        select  12  from dual 

      ) t 
      INNER join user_documents a on t.month = MONTH(d.doc_date)
      INNER join  cfw_documents d on a.user_id=d.user_id and d.doc_date >= a.created_on
      GROUP BY 1,3 ORDER BY 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...