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;