2011-10-20 7 views
0

に参加施設)。カウントと私はこのようなクエリを有する

例えば、結果は、フォローアップの種類として

company | facility | count 
-------------------------- 
goog | ohio  | 2 
goog | cali  | 0 
tekk | cupertin | 0 

のようになります。SELECT COUNT(*) FROM work_orders w WHERE w.facility = f.id AND w.approved = 1

、私はもw.approved = 0

+0

場合、あなただけのc.idとANのグループ化を必要とするように見え 'work_orders'テーブルの構造を掲示し、私は私の答えを改善しますしてください。 –

+0

'id'、' facility'外部キー、 'approved'ステータスを持っています –

答えて

2
SELECT c.id, c.name, f.name, COUNT(w.id) AS work_orders 
FROM companies c 
INNER JOIN facilities f ON c.id = f.company 
-- LEFT JOIN used in case there are facilities with no work orders 
LEFT JOIN work_orders w ON f.id = w.facility AND w.approved = 1 
GROUP BY c.id, c.name, f.name 
ORDER BY c.name DESC, f.name 

別のカウントの列を追加したいです複数のカウントを行う(承認済みかどうか):

SELECT c.id, c.name, f.name, 
    wapp.wo AS approved_work_orders, 
    wnapp.wo AS non_approved_work_orders, 
FROM companies c 
INNER JOIN facilities f ON c.id = f.company 
LEFT JOIN (SELECT facility, COUNT(*) AS wo FROM work_orders WHERE approved=1 GROUP BY facility) wapp ON f.id = wapp.facility 
LEFT JOIN (SELECT facility, COUNT(*) AS wo FROM work_orders WHERE approved=0 GROUP BY facility) wnapp ON f.id = wnapp.facility 
ORDER BY c.name DESC, f.name 
+0

これは私の結果セットを大幅に減らします。私はまだ、すべての施設が表示されるようにしたい、ちょうど彼らがwork_orderジョイン条件を満たしていない場合、 '0'を持っています –

+0

@ChrisG。 「LEFT JOIN」でも? –

+0

ええ、私は実際に 'ON f.id = w.facility AND w.approved = 1'を望んでいます –

0

声明

SELECT c.id, c.name, f.name, IF(count(0)>0,1,0) 
FROM companies c 
INNER JOIN facilities f ON c.id = f.company 
LEFT JOIN work_orders w ON w.facility = f.id 
GROUP BY f.id 
ORDER BY c.name DESC, f.name 
関連する問題