Thread: union with count?
Hi dudes, i have the following question i have 2 tables with the same format, and i want to know if is there a possibility of using some sort of count(*) for achieving this result: select a from table1 where (condition) union select a from table2 where (condition), count(a) group by a The idea is having how many times (condition) is true for both tables. Im not shure im explaining myself clearly, my english is not the best (as you can see ;) Thanks! Gerardo
am Wed, dem 28.03.2007, um 11:04:29 -0300 mailte Gerardo Herzig folgendes: > Hi dudes, i have the following question > i have 2 tables with the same format, and i want to know if is there a > possibility of using some sort of count(*) for achieving this result: > select a from table1 where (condition) union select a from table2 where > (condition), count(a) group by a > > The idea is having how many times (condition) is true for both tables. > > Im not shure im explaining myself clearly, my english is not the best > (as you can see ;) You can use a subselect, a simple example: test=# select *, count(1) from (select 1 union select 2 union select 3) foo group by 1;?column? | count ----------+------- 1 | 1 2 | 1 3 | 1 (3 rows) Andreas -- Andreas Kretschmer Kontakt: Heynitz: 035242/47150, D1: 0160/7141639 (mehr: -> Header) GnuPG-ID: 0x3FFF606C, privat 0x7F4584DA http://wwwkeys.de.pgp.net
--- Gerardo Herzig <gherzig@fmed.uba.ar> wrote: > Hi dudes, i have the following question > i have 2 tables with the same format, and i want to know if is there a > possibility of using some sort of count(*) for achieving this result: > select a from table1 where (condition) union select a from table2 where > (condition), count(a) group by a I think you are showing count(a) in the wrong spot in your example. But if I understand you correctly the following should do what you want: SELECT count(a) FROM ( SELECT a FROM table1 WHERE (your_condition = true) UNION -- you can use UNION ALL if you -- want rows that are duplicates from each table. SELECT a FROM table2 WHERE (your_condition = true) ) GROUP BY a;
Thanks! But now i have another problem related with count(): select page_id, word, word_position, count(page_id) from (select * from search_word('word1', 'table1') union search_word('word2', 'table2')) foo group by page_id; and gives me "foo.word must appear in GROUP clause or be used in an aggregate function" And i want to group by page_id only, because that is what i need to count. Tips here? Thanks again man. Gerardo >am Wed, dem 28.03.2007, um 11:04:29 -0300 mailte Gerardo Herzig folgendes: > > >>Hi dudes, i have the following question >>i have 2 tables with the same format, and i want to know if is there a >>possibility of using some sort of count(*) for achieving this result: >>select a from table1 where (condition) union select a from table2 where >>(condition), count(a) group by a >> >>The idea is having how many times (condition) is true for both tables. >> >>Im not shure im explaining myself clearly, my english is not the best >>(as you can see ;) >> >> > >You can use a subselect, a simple example: > >test=# select *, count(1) from (select 1 union select 2 union select 3) foo group by 1; > ?column? | count >----------+------- > 1 | 1 > 2 | 1 > 3 | 1 >(3 rows) > > >Andreas > >
Gerardo Herzig <gherzig@fmed.uba.ar> schrieb: > Thanks! But now i have another problem related with count(): > > select page_id, word, word_position, count(page_id) from (select * from > search_word('word1', 'table1') union search_word('word2', 'table2')) foo > group by page_id; > > and gives me "foo.word must appear in GROUP clause or be used in an > aggregate function" > > And i want to group by page_id only, because that is what i need to count. > Tips here? You can't aggregate without grouping the not-aggregated columns. Expand your 'group by' with word and word_position. Andreas -- Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect. (Linus Torvalds) "If I was god, I would recompile penguin with --enable-fly." (unknow) Kaufbach, Saxony, Germany, Europe. N 51.05082°, E 13.56889°