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 <paiva...@gmail.com> 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 <ste.fied...@googlemail.com>
>> 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
>>>> <ste.fied...@googlemail.com> 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
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Multiple-counts-between-two-tables-tp23473911p23480948.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

Reply via email to