How to use COUNT to get zero values with mysql? -
i read several questions issue on stackoverflow : seems count should used right joining display sums of every items, including ones summing zero.
i'm not able make case, after several hours of headache...
well, have 2 tables. first 1 called "words2", list of words. second 1 called "links2". it's linking 2 words : idword1 , idword2. (there no links linking 2 identical words)
for each word, know how many links used, if there no link.
this query :
select *, count(*) qty ( select * words2 left outer join links2 linksa on words2.idword = linksa.idword1 union select * words2 left outer join links2 linksb on words2.idword = linksb.idword2 ) tmp iduser = 3 , linktype = 'individual' group word order word
it works fine unless don't have results unused words, not displayed.
thank help!
to original query change count call count(idword1)
. cause count number of times idword1 not null. right counting number of rows period 1 should zero.
here's sample dataset:
words2 ------- idword ------- foo bar baz biz buzz links2 ------- idword1 | idword2 ------- foo | bar foo | baz bar | baz buzz | foo buzz | bar
(this dataset disregards iduser
, linktype
fields because original question doesn't describe how used , don't appear relevant answer.)
when run query on dataset this:
idword | idword1 | idword2 | linkcount -------------------------------------- bar | bar | baz | 3 baz | null | null | 2 biz | null | null | 1 buzz | buzz | foo | 2 foo | foo | bar | 3
also note count(*)
more expensive depending upon storage engine you're using. see other question details.
when change count count(idword1)
this:
idword | idword1 | idword2 | linkcount -------------------------------------- bar | bar | baz | 3 baz | null | null | 2 biz | null | null | 0 buzz | buzz | foo | 2 foo | foo | bar | 3
here's simpler query uses no subquery , joins words2 links2 using or
statement:
select words2.idword -- count number of links each word -- if there no links count() call return 0 , count(idword1) linkcount words2 left join links2 on words2.idword = links2.idword1 or words2.idword = links2.idword2 group words2.idword order words2.idword
when run on sample dataset following results:
idword | linkcount ------------------- bar | 3 baz | 2 biz | 0 buzz | 2 foo | 3
Comments
Post a Comment