Counting number of joined rows in left join

后端 未结 3 2095
情歌与酒
情歌与酒 2020-12-29 01:21

I\'m trying to write an aggregate query in SQL which returns the count of all records joined to a given record in a table; If no records were joined to the given record, the

3条回答
  •  野趣味
    野趣味 (楼主)
    2020-12-29 01:43

    How about something like this:

    SELECT m.MESSAGEID, sum((case when mp.messageid is not null then 1 else 0 end)) FROM MESSAGE m
    LEFT JOIN MESSAGEPART mp ON mp.MESSAGEID = m.MESSAGEID
    GROUP BY m.MESSAGEID;
    

    The COUNT() function will count every row, even if it has null. Using SUM() and CASE, you can count only non-null values.

    EDIT: A simpler version taken from the top comment:

    SELECT m.MESSAGEID, COUNT(mp.MESSAGEID) FROM MESSAGE m
    LEFT JOIN MESSAGEPART mp ON mp.MESSAGEID = m.MESSAGEID
    GROUP BY m.MESSAGEID;
    

    Hope that helps.

提交回复
热议问题