Re: IN vs EXIIST
От | Jochem van Dieten |
---|---|
Тема | Re: IN vs EXIIST |
Дата | |
Msg-id | 1032436738.3d89bc0256a9a@webmail.oli.tudelft.nl обсуждение исходный текст |
Ответ на | Re: IN vs EXIIST (Jean-Christian Imbeault <jc@mega-bucks.co.jp>) |
Список | pgsql-general |
Quoting Jean-Christian Imbeault <jc@mega-bucks.co.jp>: > > Jochem van Dieten wrote: > > > > SELECT key1, Min(CASE WHEN x THEN 1 ELSE 0 END) AS isTrue > > FROM table > > GROUP BY key1 > > HAVING isTrue = 1 > > I tried this but got an error: > psql TMP -c "select invoice_id, min(case when received then 1 else 0 > end) as ok from invoice_li group by invoice_id having ok = 1" > ERROR: Attribute 'ok' not found Sorry, not behind the console at the moment. Try either: SELECT invoice_id FROM ( SELECT invoice_id, Min(CASE WHEN received THEN 1 ELSE 0 END) AS ok FROM invoice_li GROUP BY invoice_id ) agg_invoices WHERE ok = 1 or: SELECT invoice_id, Min(CASE WHEN received THEN 1 ELSE 0 END) AS ok FROM invoice_li GROUP BY invoice_id HAVING Min(CASE WHEN received THEN 1 ELSE 0 END) = 1 Make sure you have an index on invoice_id. I am not sure if it is faster because of the case that needs to be done on each row, but I think it is worth a shot. Jochem
В списке pgsql-general по дате отправления: