2012-05-20 2 views
0

У меня есть следующий запросКак объединить запрос SELECT и запрос COUNT (*)?

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 

У меня есть еще один запрос, основанный на c.c_id указанного выше результирующего набора, который перебирает для каждой записи в выше результата набор:

SELECT COUNT(*) as totals FROM s 
WHERE c_id =? 
AND status='good'; 

7 возвращается, когда c_id=4 и возвращает 20, когда c_id=5

Есть ли способ объединить два запроса для формирования набора результатов, подобного этому?

c.cd c.c_id totals 
moot 4  7 
derp 5  20 

ответ

2

Попробуйте это:

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 ; 
1

Что-то вроде этого?

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; 
Смежные вопросы