Оператор ИЛИ в выбранной части запроса в Postgres - PullRequest
1 голос
/ 09 декабря 2011

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

SELECT 
        cd.signoffdate,
        min(cmp.dsignoff) as dsignoff
      FROM clients AS c 
      LEFT JOIN campaigns AS cmp ORDER BY dsignoff;

Если я хочу, чтобы что-то подобное было встроено в запрос postgres, будет ли оно работать и как мне это сделать

, если cd.signoffdateпустое значение должно принимать min(cmp.dsignoff) as dsignoff в качестве значения, а затем упорядочивать по этому столбцу, иными словами, оно должно упорядочиваться по dsignoff и cd.signoffdate и отображать его как один столбец, возможно ли это и как?

Ответы [ 3 ]

2 голосов
/ 09 декабря 2011

Ваш запрос может выглядеть следующим образом:

SELECT c.client_id, COALESCE(c.signoffdate, min(cmp.dsignoff)) AS signoff
FROM   clients c 
LEFT   JOIN campaigns cmp ON cmp.client_id = c.client_id  -- join condition!
GROUP  BY c.client_id, cd.signoffdate                     -- group by!
ORDER  BY COALESCE(c.signoffdate, min(cmp.dsignoff));

Или с упрощенным синтаксисом:

SELECT c.client_id, COALESCE(c.signoffdate, min(cmp.dsignoff)) AS signoff
FROM   clients c 
LEFT   JOIN campaigns cmp USING (client_id)
GROUP  BY 1, cd.signoffdate
ORDER  BY 2;

Основные моменты:

  • Использованный псевдоним c, но упоминается как cd.
  • Отсутствие условия соединения приводит к перекрестному соединению, вероятно, не предназначено.
  • Отсутствует GROUP BY.
  • Я предполагаю, что вы хотитесгруппировать по столбцу первичного ключа clients и назвать его client_id.
  • Я также предполагаю, что client_id связывает две таблицы вместе.
  • COALESCE() служит в качестве запасного варианта в случаеsignoffdate НЕДЕЙСТВИТЕЛЕН.
0 голосов
/ 09 декабря 2011

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

SELECT COALESCE(cd.signoffdate, min(cmp.dsignoff)) as dsignoff

Я не уверен, что вы можете сделать заказ по объединению в Postgres - возможно, стоит заказать по обеим колонкам

0 голосов
/ 09 декабря 2011
  ORDER BY coalesce(cd.signoffdate, min(cmp.dsignoff));

Но разве вам не нужен GROUP BY в исходном запросе?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...