Re: [sqlite] Multiple counts between two tables
This query works perfectly and responds much faster than my (SELECT COUNT(*)… approach. Thanks a lot for all your effort and help! -steffen Pavel Ivanov-2 wrote: > > Sorry, forgot END after each case, so it should look like > > SELECT > tag_name.id, > SUM(CASE WHEN tag_link.app = 't' THEN 1 ELSE 0 END) AS cntTwt, > SUM(CASE WHEN tag_link.app = 'd' THEN 1 ELSE 0 END) AS cntDel > FROM > tag_name, tag_link > WHERE > tag_link.tag_id = tag_name.id > GROUP BY > tag_name.id > > > Pavel > > On Sun, May 10, 2009 at 7:40 PM, Pavel Ivanov wrote: >> Try something like this: >> >> SELECT >> tag_name.id, >> SUM(CASE WHEN tag_link.app = 't' THEN 1 ELSE 0) AS cntTwt, >> SUM(CASE WHEN tag_link.app = 'd' THEN 1 ELSE 0) AS cntDel >> FROM >> tag_name, tag_link >> WHERE >> tag_link.tag_id = tag_name.id >> GROUP BY >> tag_name.id >> >> >> Pavel >> >> On Sun, May 10, 2009 at 6:09 PM, S Fiedler >> wrote: >>> >>> Hi Kees, >>> >>> thanks for your help. Thats a neater way than I structured my JOIN >>> version >>> before. But my goal is to have all tag COUNTs for each application in >>> one >>> result row + id and name of the tag. Like: >>> >>> tag-id | tag-name | count_app_t | count_app_d >>> - >>> 1 | sql | 9 | 2 >>> 2 | xml | 61 | 0 >>> 3 | foo | 47 | 826 >>> >>> Until now no 'JOIN construction' allowed more than one COUNT. Thats why >>> I >>> tried out the SELECT (SELECT …), (SELECT) way – which didn't though >>> errors, >>> but produced the freeze of the script. >>> >>> Regards, >>> -steffen >>> >>> >>> Kees Nuyt wrote: On Sun, 10 May 2009 13:51:29 -0700 (PDT), ckeen wrote: > >Hi, I'm trying to count two different column combinations using two >>> tables. >Table one (tag_name) contains the 'id' and the 'name' for a tag. Table two >is stuffed with entries that links those tags with different applications >and their contents. >Now I would like to select how often each tag is used in each application. >Some of my previous tries worked fine (using JOIN ON) – but only one COUNT >was possible. Now I'm trying to get a statement to work which returns me >>> the >tag amounts for both apps. > >tag_name >id | tag > >1 | sql >2 | xml >3 | foo > >tag_link >id | app | app_id | tag_id > >1 | d | 331 | 2 >2 | t | 49 | 1 > >Here is my current statement: >SELECT > tag_name.id, > (SELECT COUNT(*) FROM tag_link WHERE tag_link.tag_id = > tag_name.id AND >tag_link.app = 't') AS cntTwt, > (SELECT COUNT(*) FROM tag_link WHERE tag_link.tag_id = > tag_name.id AND >tag_link.app = 'd') AS cntDel >FROM > tag_name >GROUP BY > tag_name.id sqlite_version():3.6.13 CREATE TABLE tag_name ( id INTEGER PRIMARY KEY, tag TEXT ); CREATE TABLE app_name ( id INTEGER PRIMARY KEY, app TEXT ); CREATE TABLE tag_link ( app_id INTEGER, tag_id INTEGER, PRIMARY KEY (app_id,tag_id) ); INSERT INTO tag_name values (1,'sql'); INSERT INTO tag_name values (2,'xml'); INSERT INTO tag_name values (3,'foo'); INSERT INTO app_name values (30,'a'); INSERT INTO app_name values (39,'b'); INSERT INTO app_name values (49,'t'); INSERT INTO app_name values (331,'d'); INSERT INTO tag_link values (331,1); INSERT INTO tag_link values (331,2); INSERT INTO tag_link values (49,1); INSERT INTO tag_link values (30,1); INSERT INTO tag_link values (39,2); INSERT INTO tag_link values (331,3); INSERT INTO tag_link values (49,3); SELECT app_name.id,app,COUNT(tag_link.tag_id) AS nrtags FROM tag_link INNER JOIN app_name ON (app_name.id = tag_link.app_id) GROUP BY tag_link.app_id; app_name.id|app_name.app|nrtags 30|a|1 39|b|1 49|t|2 331|d|3 >The parser returns no error, only seems to freeze. Tipps, hints – all kind >of advice. >sincerely, ckeen Hope this helps. -- ( Kees Nuyt ) c[_] ___ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users >>> >>> -- >>> View this message in context: >>> http://www.nabble.com/Multiple-counts-between-two-tables-tp23473911p23474562.html >>> Sent from the SQLite mailing list archive at Nabble.com. >>> >>> ___ >>> sqlite-users mailing list >>> sqlite-users@sqlite.org >>> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users >>> >> > ___
Re: [sqlite] Multiple counts between two tables
Sorry, forgot END after each case, so it should look like SELECT tag_name.id, SUM(CASE WHEN tag_link.app = 't' THEN 1 ELSE 0 END) AS cntTwt, SUM(CASE WHEN tag_link.app = 'd' THEN 1 ELSE 0 END) AS cntDel FROM tag_name, tag_link WHERE tag_link.tag_id = tag_name.id GROUP BY tag_name.id Pavel On Sun, May 10, 2009 at 7:40 PM, Pavel Ivanov wrote: > Try something like this: > > SELECT > tag_name.id, > SUM(CASE WHEN tag_link.app = 't' THEN 1 ELSE 0) AS cntTwt, > SUM(CASE WHEN tag_link.app = 'd' THEN 1 ELSE 0) AS cntDel > FROM > tag_name, tag_link > WHERE > tag_link.tag_id = tag_name.id > GROUP BY > tag_name.id > > > Pavel > > On Sun, May 10, 2009 at 6:09 PM, S Fiedler wrote: >> >> Hi Kees, >> >> thanks for your help. Thats a neater way than I structured my JOIN version >> before. But my goal is to have all tag COUNTs for each application in one >> result row + id and name of the tag. Like: >> >> tag-id | tag-name | count_app_t | count_app_d >> - >> 1 | sql | 9 | 2 >> 2 | xml | 61 | 0 >> 3 | foo | 47 | 826 >> >> Until now no 'JOIN construction' allowed more than one COUNT. Thats why I >> tried out the SELECT (SELECT …), (SELECT) way – which didn't though errors, >> but produced the freeze of the script. >> >> Regards, >> -steffen >> >> >> Kees Nuyt wrote: >>> >>> On Sun, 10 May 2009 13:51:29 -0700 (PDT), ckeen >>> wrote: >>> Hi, I'm trying to count two different column combinations using two >> tables. Table one (tag_name) contains the 'id' and the 'name' for a tag. Table two is stuffed with entries that links those tags with different applications and their contents. Now I would like to select how often each tag is used in each application. Some of my previous tries worked fine (using JOIN ON) – but only one COUNT was possible. Now I'm trying to get a statement to work which returns me >> the tag amounts for both apps. tag_name id | tag 1 | sql 2 | xml 3 | foo tag_link id | app | app_id | tag_id 1 | d | 331 | 2 2 | t | 49 | 1 Here is my current statement: SELECT tag_name.id, (SELECT COUNT(*) FROM tag_link WHERE tag_link.tag_id = tag_name.id AND tag_link.app = 't') AS cntTwt, (SELECT COUNT(*) FROM tag_link WHERE tag_link.tag_id = tag_name.id AND tag_link.app = 'd') AS cntDel FROM tag_name GROUP BY tag_name.id >>> >>> >>> sqlite_version():3.6.13 >>> CREATE TABLE tag_name ( >>> id INTEGER PRIMARY KEY, >>> tag TEXT >>> ); >>> CREATE TABLE app_name ( >>> id INTEGER PRIMARY KEY, >>> app TEXT >>> ); >>> CREATE TABLE tag_link ( >>> app_id INTEGER, >>> tag_id INTEGER, >>> PRIMARY KEY (app_id,tag_id) >>> ); >>> INSERT INTO tag_name values (1,'sql'); >>> INSERT INTO tag_name values (2,'xml'); >>> INSERT INTO tag_name values (3,'foo'); >>> >>> INSERT INTO app_name values (30,'a'); >>> INSERT INTO app_name values (39,'b'); >>> INSERT INTO app_name values (49,'t'); >>> INSERT INTO app_name values (331,'d'); >>> >>> INSERT INTO tag_link values (331,1); >>> INSERT INTO tag_link values (331,2); >>> INSERT INTO tag_link values (49,1); >>> INSERT INTO tag_link values (30,1); >>> INSERT INTO tag_link values (39,2); >>> INSERT INTO tag_link values (331,3); >>> INSERT INTO tag_link values (49,3); >>> >>> SELECT app_name.id,app,COUNT(tag_link.tag_id) AS nrtags >>> FROM tag_link >>> INNER JOIN app_name ON (app_name.id = tag_link.app_id) >>> GROUP BY tag_link.app_id; >>> >>> app_name.id|app_name.app|nrtags >>> 30|a|1 >>> 39|b|1 >>> 49|t|2 >>> 331|d|3 >>> >>> The parser returns no error, only seems to freeze. Tipps, hints – all kind of advice. sincerely, ckeen >>> >>> Hope this helps. >>> -- >>> ( Kees Nuyt >>> ) >>> c[_] >>> ___ >>> sqlite-users mailing list >>> sqlite-users@sqlite.org >>> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users >>> >>> >> >> -- >> View this message in context: >> http://www.nabble.com/Multiple-counts-between-two-tables-tp23473911p23474562.html >> Sent from the SQLite mailing list archive at Nabble.com. >> >> ___ >> sqlite-users mailing list >> sqlite-users@sqlite.org >> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users >> > ___ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
Re: [sqlite] Multiple counts between two tables
Try something like this: SELECT tag_name.id, SUM(CASE WHEN tag_link.app = 't' THEN 1 ELSE 0) AS cntTwt, SUM(CASE WHEN tag_link.app = 'd' THEN 1 ELSE 0) AS cntDel FROM tag_name, tag_link WHERE tag_link.tag_id = tag_name.id GROUP BY tag_name.id Pavel On Sun, May 10, 2009 at 6:09 PM, S Fiedler wrote: > > Hi Kees, > > thanks for your help. Thats a neater way than I structured my JOIN version > before. But my goal is to have all tag COUNTs for each application in one > result row + id and name of the tag. Like: > > tag-id | tag-name | count_app_t | count_app_d > - > 1 | sql | 9 | 2 > 2 | xml | 61 | 0 > 3 | foo | 47 | 826 > > Until now no 'JOIN construction' allowed more than one COUNT. Thats why I > tried out the SELECT (SELECT …), (SELECT) way – which didn't though errors, > but produced the freeze of the script. > > Regards, > -steffen > > > Kees Nuyt wrote: >> >> On Sun, 10 May 2009 13:51:29 -0700 (PDT), ckeen >> wrote: >> >>> >>>Hi, I'm trying to count two different column combinations using two > tables. >>>Table one (tag_name) contains the 'id' and the 'name' for a tag. Table two >>>is stuffed with entries that links those tags with different applications >>>and their contents. >>>Now I would like to select how often each tag is used in each application. >>>Some of my previous tries worked fine (using JOIN ON) – but only one COUNT >>>was possible. Now I'm trying to get a statement to work which returns me > the >>>tag amounts for both apps. >>> >>>tag_name >>>id | tag >>> >>>1 | sql >>>2 | xml >>>3 | foo >>> >>>tag_link >>>id | app | app_id | tag_id >>> >>>1 | d | 331 | 2 >>>2 | t | 49 | 1 >>> >>>Here is my current statement: >>>SELECT >>> tag_name.id, >>> (SELECT COUNT(*) FROM tag_link WHERE tag_link.tag_id = tag_name.id AND >>>tag_link.app = 't') AS cntTwt, >>> (SELECT COUNT(*) FROM tag_link WHERE tag_link.tag_id = tag_name.id AND >>>tag_link.app = 'd') AS cntDel >>>FROM >>> tag_name >>>GROUP BY >>> tag_name.id >> >> >> sqlite_version():3.6.13 >> CREATE TABLE tag_name ( >> id INTEGER PRIMARY KEY, >> tag TEXT >> ); >> CREATE TABLE app_name ( >> id INTEGER PRIMARY KEY, >> app TEXT >> ); >> CREATE TABLE tag_link ( >> app_id INTEGER, >> tag_id INTEGER, >> PRIMARY KEY (app_id,tag_id) >> ); >> INSERT INTO tag_name values (1,'sql'); >> INSERT INTO tag_name values (2,'xml'); >> INSERT INTO tag_name values (3,'foo'); >> >> INSERT INTO app_name values (30,'a'); >> INSERT INTO app_name values (39,'b'); >> INSERT INTO app_name values (49,'t'); >> INSERT INTO app_name values (331,'d'); >> >> INSERT INTO tag_link values (331,1); >> INSERT INTO tag_link values (331,2); >> INSERT INTO tag_link values (49,1); >> INSERT INTO tag_link values (30,1); >> INSERT INTO tag_link values (39,2); >> INSERT INTO tag_link values (331,3); >> INSERT INTO tag_link values (49,3); >> >> SELECT app_name.id,app,COUNT(tag_link.tag_id) AS nrtags >> FROM tag_link >> INNER JOIN app_name ON (app_name.id = tag_link.app_id) >> GROUP BY tag_link.app_id; >> >> app_name.id|app_name.app|nrtags >> 30|a|1 >> 39|b|1 >> 49|t|2 >> 331|d|3 >> >> >>>The parser returns no error, only seems to freeze. Tipps, hints – all kind >>>of advice. >>>sincerely, ckeen >> >> Hope this helps. >> -- >> ( Kees Nuyt >> ) >> c[_] >> ___ >> sqlite-users mailing list >> sqlite-users@sqlite.org >> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users >> >> > > -- > View this message in context: > http://www.nabble.com/Multiple-counts-between-two-tables-tp23473911p23474562.html > Sent from the SQLite mailing list archive at Nabble.com. > > ___ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > ___ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
Re: [sqlite] Multiple counts between two tables
Oh – all the sql stuff has never been real easy for me at all. Basically I have a database which is filled by several applications working with tags. In the database there is only one table that contains the names of the tags – the other one links to the application and specifies in which content the tag occurred. However, after the http://www.nabble.com/forum/ViewPost.jtp?post=23474516&framed=y hint from P Kishor I waited about four minutes and the freeze was gone. My query seems to work but it takes much to long. Currently the table 'tag_name' has 6690 and 'tag_link' 50714 entries. Your JOIN-query felt like one second – but only with one COUNT :/ Kees Nuyt wrote: > > On Sun, 10 May 2009 15:09:01 -0700 (PDT), S Fiedler > wrote: > >> >>Hi Kees, >> >>thanks for your help. Thats a neater way than I structured my JOIN version >>before. But my goal is to have all tag COUNTs for each application in one >>result row + id and name of the tag. Like: >> >>tag-id | tag-name | count_app_t | count_app_d >>- >>1 | sql | 9| 2 >>2 | xml| 61 | 0 >>3 | foo | 47 | 826 >> >>Until now no 'JOIN construction' allowed more than one COUNT. Thats why I >>tried out the SELECT (SELECT …), (SELECT) way – which didn't though errors, >>but produced the freeze of the script. > > Aha, I see, you mean a pivot report. > That can't be easily done in plain SQL. > > What is weird in your example, is that the same application > ('d') uses the same tag more then once. Is that on purpose? > In other words, it's not completely clear to me what you are > trying to accomplish. > >>Regards, >>-steffen >> >> >>Kees Nuyt wrote: >>> >>> On Sun, 10 May 2009 13:51:29 -0700 (PDT), ckeen >>> wrote: >>> Hi, I'm trying to count two different column combinations using two >>tables. Table one (tag_name) contains the 'id' and the 'name' for a tag. Table two is stuffed with entries that links those tags with different applications and their contents. Now I would like to select how often each tag is used in each application. Some of my previous tries worked fine (using JOIN ON) – but only one COUNT was possible. Now I'm trying to get a statement to work which returns me >>the tag amounts for both apps. tag_name id | tag 1 | sql 2 | xml 3 | foo tag_link id | app | app_id | tag_id 1 | d| 331 | 2 2 | t | 49 | 1 Here is my current statement: SELECT tag_name.id, (SELECT COUNT(*) FROM tag_link WHERE tag_link.tag_id = tag_name.id AND tag_link.app = 't') AS cntTwt, (SELECT COUNT(*) FROM tag_link WHERE tag_link.tag_id = tag_name.id AND tag_link.app = 'd') AS cntDel FROM tag_name GROUP BY tag_name.id >>> >>> >>> sqlite_version():3.6.13 >>> CREATE TABLE tag_name ( >>> id INTEGER PRIMARY KEY, >>> tag TEXT >>> ); >>> CREATE TABLE app_name ( >>> id INTEGER PRIMARY KEY, >>> app TEXT >>> ); >>> CREATE TABLE tag_link ( >>> app_id INTEGER, >>> tag_id INTEGER, >>> PRIMARY KEY (app_id,tag_id) >>> ); >>> INSERT INTO tag_name values (1,'sql'); >>> INSERT INTO tag_name values (2,'xml'); >>> INSERT INTO tag_name values (3,'foo'); >>> >>> INSERT INTO app_name values (30,'a'); >>> INSERT INTO app_name values (39,'b'); >>> INSERT INTO app_name values (49,'t'); >>> INSERT INTO app_name values (331,'d'); >>> >>> INSERT INTO tag_link values (331,1); >>> INSERT INTO tag_link values (331,2); >>> INSERT INTO tag_link values (49,1); >>> INSERT INTO tag_link values (30,1); >>> INSERT INTO tag_link values (39,2); >>> INSERT INTO tag_link values (331,3); >>> INSERT INTO tag_link values (49,3); >>> >>> SELECT app_name.id,app,COUNT(tag_link.tag_id) AS nrtags >>> FROM tag_link >>> INNER JOIN app_name ON (app_name.id = tag_link.app_id) >>> GROUP BY tag_link.app_id; >>> >>> app_name.id|app_name.app|nrtags >>> 30|a|1 >>> 39|b|1 >>> 49|t|2 >>> 331|d|3 >>> >>> The parser returns no error, only seems to freeze. Tipps, hints – all kind of advice. sincerely, ckeen >>> >>> Hope this helps. > -- > ( Kees Nuyt > ) > c[_] > ___ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > > -- View this message in context: http://www.nabble.com/Multiple-counts-between-two-tables-tp23473911p23474904.html Sent from the SQLite mailing list archive at Nabble.com. ___ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
Re: [sqlite] Multiple counts between two tables
On Sun, 10 May 2009 15:09:01 -0700 (PDT), S Fiedler wrote: > >Hi Kees, > >thanks for your help. Thats a neater way than I structured my JOIN version >before. But my goal is to have all tag COUNTs for each application in one >result row + id and name of the tag. Like: > >tag-id | tag-name | count_app_t | count_app_d >- >1 | sql | 9| 2 >2 | xml| 61 | 0 >3 | foo | 47 | 826 > >Until now no 'JOIN construction' allowed more than one COUNT. Thats why I >tried out the SELECT (SELECT …), (SELECT) way – which didn't though errors, >but produced the freeze of the script. Aha, I see, you mean a pivot report. That can't be easily done in plain SQL. What is weird in your example, is that the same application ('d') uses the same tag more then once. Is that on purpose? In other words, it's not completely clear to me what you are trying to accomplish. >Regards, >-steffen > > >Kees Nuyt wrote: >> >> On Sun, 10 May 2009 13:51:29 -0700 (PDT), ckeen >> wrote: >> >>> >>>Hi, I'm trying to count two different column combinations using two >tables. >>>Table one (tag_name) contains the 'id' and the 'name' for a tag. Table two >>>is stuffed with entries that links those tags with different applications >>>and their contents. >>>Now I would like to select how often each tag is used in each application. >>>Some of my previous tries worked fine (using JOIN ON) – but only one COUNT >>>was possible. Now I'm trying to get a statement to work which returns me >the >>>tag amounts for both apps. >>> >>>tag_name >>>id | tag >>> >>>1 | sql >>>2 | xml >>>3 | foo >>> >>>tag_link >>>id | app | app_id | tag_id >>> >>>1 | d| 331 | 2 >>>2 | t | 49 | 1 >>> >>>Here is my current statement: >>>SELECT >>> tag_name.id, >>> (SELECT COUNT(*) FROM tag_link WHERE tag_link.tag_id = tag_name.id AND >>>tag_link.app = 't') AS cntTwt, >>> (SELECT COUNT(*) FROM tag_link WHERE tag_link.tag_id = tag_name.id AND >>>tag_link.app = 'd') AS cntDel >>>FROM >>> tag_name >>>GROUP BY >>> tag_name.id >> >> >> sqlite_version():3.6.13 >> CREATE TABLE tag_name ( >> id INTEGER PRIMARY KEY, >> tag TEXT >> ); >> CREATE TABLE app_name ( >> id INTEGER PRIMARY KEY, >> app TEXT >> ); >> CREATE TABLE tag_link ( >> app_id INTEGER, >> tag_id INTEGER, >> PRIMARY KEY (app_id,tag_id) >> ); >> INSERT INTO tag_name values (1,'sql'); >> INSERT INTO tag_name values (2,'xml'); >> INSERT INTO tag_name values (3,'foo'); >> >> INSERT INTO app_name values (30,'a'); >> INSERT INTO app_name values (39,'b'); >> INSERT INTO app_name values (49,'t'); >> INSERT INTO app_name values (331,'d'); >> >> INSERT INTO tag_link values (331,1); >> INSERT INTO tag_link values (331,2); >> INSERT INTO tag_link values (49,1); >> INSERT INTO tag_link values (30,1); >> INSERT INTO tag_link values (39,2); >> INSERT INTO tag_link values (331,3); >> INSERT INTO tag_link values (49,3); >> >> SELECT app_name.id,app,COUNT(tag_link.tag_id) AS nrtags >> FROM tag_link >> INNER JOIN app_name ON (app_name.id = tag_link.app_id) >> GROUP BY tag_link.app_id; >> >> app_name.id|app_name.app|nrtags >> 30|a|1 >> 39|b|1 >> 49|t|2 >> 331|d|3 >> >> >>>The parser returns no error, only seems to freeze. Tipps, hints – all kind >>>of advice. >>>sincerely, ckeen >> >> Hope this helps. -- ( Kees Nuyt ) c[_] ___ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
Re: [sqlite] Multiple counts between two tables
Hi Kees, thanks for your help. Thats a neater way than I structured my JOIN version before. But my goal is to have all tag COUNTs for each application in one result row + id and name of the tag. Like: tag-id | tag-name | count_app_t | count_app_d - 1 | sql | 9| 2 2 | xml| 61 | 0 3 | foo | 47 | 826 Until now no 'JOIN construction' allowed more than one COUNT. Thats why I tried out the SELECT (SELECT …), (SELECT) way – which didn't though errors, but produced the freeze of the script. Regards, -steffen Kees Nuyt wrote: > > On Sun, 10 May 2009 13:51:29 -0700 (PDT), ckeen > wrote: > >> >>Hi, I'm trying to count two different column combinations using two tables. >>Table one (tag_name) contains the 'id' and the 'name' for a tag. Table two >>is stuffed with entries that links those tags with different applications >>and their contents. >>Now I would like to select how often each tag is used in each application. >>Some of my previous tries worked fine (using JOIN ON) – but only one COUNT >>was possible. Now I'm trying to get a statement to work which returns me the >>tag amounts for both apps. >> >>tag_name >>id | tag >> >>1 | sql >>2 | xml >>3 | foo >> >>tag_link >>id | app | app_id | tag_id >> >>1 | d| 331 | 2 >>2 | t | 49 | 1 >> >>Here is my current statement: >>SELECT >> tag_name.id, >> (SELECT COUNT(*) FROM tag_link WHERE tag_link.tag_id = tag_name.id AND >>tag_link.app = 't') AS cntTwt, >> (SELECT COUNT(*) FROM tag_link WHERE tag_link.tag_id = tag_name.id AND >>tag_link.app = 'd') AS cntDel >>FROM >> tag_name >>GROUP BY >> tag_name.id > > > sqlite_version():3.6.13 > CREATE TABLE tag_name ( > id INTEGER PRIMARY KEY, > tag TEXT > ); > CREATE TABLE app_name ( > id INTEGER PRIMARY KEY, > app TEXT > ); > CREATE TABLE tag_link ( > app_id INTEGER, > tag_id INTEGER, > PRIMARY KEY (app_id,tag_id) > ); > INSERT INTO tag_name values (1,'sql'); > INSERT INTO tag_name values (2,'xml'); > INSERT INTO tag_name values (3,'foo'); > > INSERT INTO app_name values (30,'a'); > INSERT INTO app_name values (39,'b'); > INSERT INTO app_name values (49,'t'); > INSERT INTO app_name values (331,'d'); > > INSERT INTO tag_link values (331,1); > INSERT INTO tag_link values (331,2); > INSERT INTO tag_link values (49,1); > INSERT INTO tag_link values (30,1); > INSERT INTO tag_link values (39,2); > INSERT INTO tag_link values (331,3); > INSERT INTO tag_link values (49,3); > > SELECT app_name.id,app,COUNT(tag_link.tag_id) AS nrtags > FROM tag_link > INNER JOIN app_name ON (app_name.id = tag_link.app_id) > GROUP BY tag_link.app_id; > > app_name.id|app_name.app|nrtags > 30|a|1 > 39|b|1 > 49|t|2 > 331|d|3 > > >>The parser returns no error, only seems to freeze. Tipps, hints – all kind >>of advice. >>sincerely, ckeen > > Hope this helps. > -- > ( Kees Nuyt > ) > c[_] > ___ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > > -- View this message in context: http://www.nabble.com/Multiple-counts-between-two-tables-tp23473911p23474562.html Sent from the SQLite mailing list archive at Nabble.com. ___ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
Re: [sqlite] Multiple counts between two tables
On Sun, May 10, 2009 at 3:51 PM, ckeen wrote: > > Hi, I'm trying to count two different column combinations using two tables. > Table one (tag_name) contains the 'id' and the 'name' for a tag. Table two > is stuffed with entries that links those tags with different applications > and their contents. > Now I would like to select how often each tag is used in each application. > Some of my previous tries worked fine (using JOIN ON) – but only one COUNT > was possible. Now I'm trying to get a statement to work which returns me the > tag amounts for both apps. > > tag_name > id | tag > > 1 | sql > 2 | xml > 3 | foo > > tag_link > id | app | app_id | tag_id > > 1 | d | 331 | 2 > 2 | t | 49 | 1 > > Here is my current statement: > SELECT > tag_name.id, > (SELECT COUNT(*) FROM tag_link WHERE tag_link.tag_id = tag_name.id AND > tag_link.app = 't') AS cntTwt, > (SELECT COUNT(*) FROM tag_link WHERE tag_link.tag_id = tag_name.id AND > tag_link.app = 'd') AS cntDel > FROM > tag_name > GROUP BY > tag_name.id > > The parser returns no error, only seems to freeze. Tipps, hints – all kind > of advice. > sincerely, ckeen Works for me [08:56 PM] ~/Projects/postgis-1.3.6$sqlite3 SQLite version 3.6.11 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> create table tag_name (id, tag); sqlite> create table tag_link (id, app, app_id, tag_id); sqlite> insert into tag_name values (1, 'sql'); sqlite> insert into tag_name values (2, 'xml'); sqlite> insert into tag_name values (3, 'foo'); sqlite> insert into tag_link values (1, 'd', 331, 2); sqlite> insert into tag_link values (2, 't', 49, 1); sqlite> SELECT tag_name.id, ...> (SELECT COUNT(*) FROM tag_link a JOIN tag_name b ON a.id = b.id AND a.app = 't') AS cntTwt, ...> (SELECT COUNT(*) FROM tag_link a JOIN tag_name b ON a.id = b.id AND a.app = 'd') AS cntDel ...> FROM tag_name ...> GROUP BY tag_name.id; id cntTwt cntDel -- -- -- 1 1 1 2 1 1 3 1 1 sqlite> -- Puneet Kishor http://www.punkish.org/ Carbon Model http://carbonmodel.org/ Charter Member, Open Source Geospatial Foundation http://www.osgeo.org/ Science Commons Fellow, Geospatial Data http://sciencecommons.org Nelson Institute, UW-Madison http://www.nelson.wisc.edu/ --- collaborate, communicate, compete === Sent from Madison, WI, United States ___ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
Re: [sqlite] Multiple counts between two tables
On Sun, 10 May 2009 13:51:29 -0700 (PDT), ckeen wrote: > >Hi, I'm trying to count two different column combinations using two tables. >Table one (tag_name) contains the 'id' and the 'name' for a tag. Table two >is stuffed with entries that links those tags with different applications >and their contents. >Now I would like to select how often each tag is used in each application. >Some of my previous tries worked fine (using JOIN ON) – but only one COUNT >was possible. Now I'm trying to get a statement to work which returns me the >tag amounts for both apps. > >tag_name >id | tag > >1 | sql >2 | xml >3 | foo > >tag_link >id | app | app_id | tag_id > >1 | d| 331 | 2 >2 | t | 49 | 1 > >Here is my current statement: >SELECT > tag_name.id, > (SELECT COUNT(*) FROM tag_link WHERE tag_link.tag_id = tag_name.id AND >tag_link.app = 't') AS cntTwt, > (SELECT COUNT(*) FROM tag_link WHERE tag_link.tag_id = tag_name.id AND >tag_link.app = 'd') AS cntDel >FROM > tag_name >GROUP BY > tag_name.id sqlite_version():3.6.13 CREATE TABLE tag_name ( id INTEGER PRIMARY KEY, tag TEXT ); CREATE TABLE app_name ( id INTEGER PRIMARY KEY, app TEXT ); CREATE TABLE tag_link ( app_id INTEGER, tag_id INTEGER, PRIMARY KEY (app_id,tag_id) ); INSERT INTO tag_name values (1,'sql'); INSERT INTO tag_name values (2,'xml'); INSERT INTO tag_name values (3,'foo'); INSERT INTO app_name values (30,'a'); INSERT INTO app_name values (39,'b'); INSERT INTO app_name values (49,'t'); INSERT INTO app_name values (331,'d'); INSERT INTO tag_link values (331,1); INSERT INTO tag_link values (331,2); INSERT INTO tag_link values (49,1); INSERT INTO tag_link values (30,1); INSERT INTO tag_link values (39,2); INSERT INTO tag_link values (331,3); INSERT INTO tag_link values (49,3); SELECT app_name.id,app,COUNT(tag_link.tag_id) AS nrtags FROM tag_link INNER JOIN app_name ON (app_name.id = tag_link.app_id) GROUP BY tag_link.app_id; app_name.id|app_name.app|nrtags 30|a|1 39|b|1 49|t|2 331|d|3 >The parser returns no error, only seems to freeze. Tipps, hints – all kind >of advice. >sincerely, ckeen Hope this helps. -- ( Kees Nuyt ) c[_] ___ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users