Получить ненулевые идентификаторы без предложения where - PullRequest
0 голосов
/ 24 мая 2019

Я хочу получить ненулевой счетчик funnel_id.я получаю funnel_id count, но также показываю, что count funnel_id равен нулю, и здесь мы не добавляем здесь выражение where, я также получаю page_count в этом запросе.

SELECT `smart_projects`.project_id, `smart_projects`.business_id, `smart_projects`.title,
`page_pages`.`funnel_id` as `funnel_id`, count(distinct(page_pages.page_id) )as page_count, count(distinct(page_pages.funnel_id) )as funnel_count
FROM `smart_projects`
LEFT JOIN `page_pages` ON `smart_projects`.`project_id` = `page_pages`.`project_id`
WHERE  smart_projects.status !=  0
AND `smart_projects`.`business_id` = 'cd9412774edb11e9'
AND `smart_projects`.`created_date` BETWEEN 1558031400 AND 1558722600
GROUP BY `smart_projects`.`project_id`
ORDER BY `funnel_count` ASC
 LIMIT 10

таблица page_pages:

smart_projects table

Таблица smart_projects:

enter image description here

Результат: -

enter image description here

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

enter image description here

Ответы [ 2 ]

0 голосов
/ 24 мая 2019
SELECT `smart_projects`.project_id, `smart_projects`.business_id, `smart_projects`.title,
 `page_pages`.`funnel_id` as `funnel_id`, count(distinct(page_pages.page_id) )as page_count, count(distinct (CASE WHEN page_pages.funnel_id != 0 then  page_pages.funnel_id ELSE NULL END ) ) as funnel_count
FROM `smart_projects`
LEFT JOIN `page_pages` ON `smart_projects`.`project_id` = `page_pages`.`project_id`
WHERE  smart_projects.status !=  0 
AND `smart_projects`.`business_id` = 'cd9412774edb11e9'
GROUP BY `smart_projects`.`project_id`
ORDER BY `title` DESC
0 голосов
/ 24 мая 2019

Если вы хотите отфильтровать нулевые значения, используя предложение having:

SELECT sp.project_id, sp.business_id, sp.title,
       count(distinct pp.page_id ) as page_count, 
       count(distinct pp.funnel_id ) as funnel_count
FROM `smart_projects` sp LEFT JOIN
      `page_pages` pp
      ON sp.`project_id` = pp.`project_id`
WHERE sp.status <>  0 AND
      sp.`business_id` = 'cd9412774edb11e9' AND
      sp.`created_date` BETWEEN 1558031400 AND 1558722600
GROUP BY sp.`project_id`
HAVING funnel_count > 0
ORDER BY `funnel_count` ASC
LIMIT 10;

Примечания:

  • Псевдонимы таблиц облегчают написание и чтение запроса.
  • DISTINCT это не функция, это ключевое слово.Следующее выражение не нуждается в скобках.
  • funnel_id не подходит в SELECT, потому что это аргумент функции агрегирования.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...