Mysql 如何组合选择查询和计数(*)查询?

Mysql 如何组合选择查询和计数(*)查询?,mysql,sql,Mysql,Sql,我有以下疑问 SELECT c.cd, c.c_id FROM f f INNER JOIN s s ON s.s_id = f.s_id INNER JOIN c c ON c.c_id = s.c_id WHERE f.m_id = 2 AND f.deleted = 'no'

我有以下疑问

SELECT 
          c.cd,
          c.c_id 
FROM
          f f 
          INNER JOIN s s 
                    ON s.s_id = f.s_id 
          INNER JOIN c c 
                    ON c.c_id = s.c_id 
WHERE f.m_id = 2 
          AND f.deleted = 'no' 
GROUP BY s.c_id 
ORDER BY f.update_datetime DESC ;
返回一个示例结果集:

c.cd    c.c_id
moot    4
derp    5
SELECT COUNT(*) as totals FROM s
WHERE c_id =?
AND status='good';
我有另一个基于上述结果集的
c.c_id
的查询,该查询针对上述结果集中的每个记录进行迭代:

c.cd    c.c_id
moot    4
derp    5
SELECT COUNT(*) as totals FROM s
WHERE c_id =?
AND status='good';
c_id=4时返回
7
,当
c_id=5时返回
20

有什么方法可以将这两个查询组合成这样的结果集吗

c.cd    c.c_id  totals
moot    4       7
derp    5       20
SELECT c.cd, c.c_id
      ,SUM(CASE WHEN s.status = 'good' THEN 1 ELSE 0 END) AS totals
  FROM f f
  INNER JOIN s s ON s.s_id = f.s_id 
  INNER JOIN c c ON c.c_id = s.c_id

WHERE f.m_id =2
  AND f.deleted='no'

GROUP BY s.c_id
ORDER BY f.update_datetime DESC;
试试这个:

SELECT 
          c.cd,
          c.c_id,
          (SELECT COUNT(*) FROM  s WHERE c_id = c.c_id AND STATUS = 'good') totals 
FROM
          f INNER JOIN s  ON s.s_id = f.s_id 
          INNER JOIN c c ON c.c_id = s.c_id 
WHERE     f.m_id = 2 AND f.deleted = 'no' 
GROUP BY  s.c_id 
ORDER BY  f.update_datetime DESC ;
试试这个:

SELECT 
          c.cd,
          c.c_id,
          (SELECT COUNT(*) FROM  s WHERE c_id = c.c_id AND STATUS = 'good') totals 
FROM
          f INNER JOIN s  ON s.s_id = f.s_id 
          INNER JOIN c c ON c.c_id = s.c_id 
WHERE     f.m_id = 2 AND f.deleted = 'no' 
GROUP BY  s.c_id 
ORDER BY  f.update_datetime DESC ;
像这样的

c.cd    c.c_id  totals
moot    4       7
derp    5       20
SELECT c.cd, c.c_id
      ,SUM(CASE WHEN s.status = 'good' THEN 1 ELSE 0 END) AS totals
  FROM f f
  INNER JOIN s s ON s.s_id = f.s_id 
  INNER JOIN c c ON c.c_id = s.c_id

WHERE f.m_id =2
  AND f.deleted='no'

GROUP BY s.c_id
ORDER BY f.update_datetime DESC;
像这样的

c.cd    c.c_id  totals
moot    4       7
derp    5       20
SELECT c.cd, c.c_id
      ,SUM(CASE WHEN s.status = 'good' THEN 1 ELSE 0 END) AS totals
  FROM f f
  INNER JOIN s s ON s.s_id = f.s_id 
  INNER JOIN c c ON c.c_id = s.c_id

WHERE f.m_id =2
  AND f.deleted='no'

GROUP BY s.c_id
ORDER BY f.update_datetime DESC;