Mysql 对嵌套查询中的特定行进行计数

Mysql 对嵌套查询中的特定行进行计数,mysql,sql,Mysql,Sql,我试图用下面的查询来计算特定字段上的记录数 SELECT COUNT(DISTINCT CASE WHEN seen='n' and reciever_id=1 THEN 'varb' ELSE 'novarb' END) AS count ,c.id, c.vmsg, c.sender_id, p.fname, p.lname, p.profile_pix, p.profile_id FROM chats c LEFT JOIN profile p ON c.sender_id = p.p

我试图用下面的查询来计算特定字段上的记录数

SELECT COUNT(DISTINCT CASE WHEN seen='n' and reciever_id=1 THEN 'varb' ELSE  'novarb' END) AS count ,c.id, c.vmsg, c.sender_id, p.fname, p.lname, p.profile_pix, p.profile_id
FROM chats c LEFT JOIN profile p  ON c.sender_id = p.profile_id
WHERE c.reciever_id = 1 AND c.id in (SELECT MAX(c.id) as id FROM  chats c
GROUP BY c.sender_id )

但是我得到的答案只返回一条记录,而如果使用
varb
novarb
则会显示其他数百条记录,如果有1,则dictinct计数最大为2,表示只有一个条件

您可能需要计算
varb
条目的数量

SELECT COUNT(
            CASE WHEN seen ='n' and reciever_id=1 
                    THEN 'varb' 
                    ELSE  NULL
            END) AS count ,c.id, c.vmsg, c.sender_id, p.fname, p.lname, p.profile_pix, p.profile_id
FROM chats c 
LEFT JOIN profile p  ON c.sender_id = p.profile_id
WHERE c.reciever_id = 1 AND c.id in (
      SELECT MAX(c.id) as id FROM  chats c
      GROUP BY c.sender_id )
为此,我通常使用
SUM()
。如果我理解正确,您需要满足条件和不满足条件的行数:

SELECT SUM( seen = 'n' and reciever_id = 1 ) as varb,
       SUM( not (seen = 'n' and reciever_id = 1) ) as novarb,
       c.id, c.vmsg, c.sender_id, p.fname, p.lname, p.profile_pix, p.profile_id
FROM chats c JOIN  -- I doubt a left join is necessary
     profile p
     ON c.sender_id = p.profile_id
WHERE c.reciever_id = 1 AND
      c.id in (SELECT MAX(c2.id) FROM  chats c2 GROUP BY c2.sender_id)

你能为这个做一把小提琴吗?