2017-10-20 31 views
0

我想JOIN多個表,並使用GROUP BY使用COUNT和GROUP BY與多個JOIN表

表少這樣

表一

a_id | name   
------------   
1 | john   
2 | david 
3 | anna 

表需要COUNT從多個表B

b_id | b_title 
-------------- 
1 | b1  
2 | b2  
3 | b3  

表C中

c_id | c_title | b_id 
------------------------ 
1 | c1  | 2 
2 | c2  | 3 
3 | c3  | 1 
4 | c4  | 1 

表d

d_id | d_title | c_id | a_id | cost 
----------------------------------- 
1 | d1  | 3 | 1 | 200 
2 | d2  | 1 | 1 | 130 
3 | d3  | 2 | 2 | 240 
4 | d4  | 2 | 3 | 170 
5 | d5  | 4 | 1 | 95 

我想是這樣的

name | COUNT(b_id) | COUNT(d_id) | SUM(cost) 
-------------------------------------------- 
john |  2  |  3  | 425 
david|  1  |  1  | 240 
anna |  1  |  1  | 170 

這是我的查詢

SELECT a.name, COUNT(d.d_id), SUM(cost) 
FROM a INNER JOIN d ON a.a_id = d.a_id 
GROUP BY a.a_id 

我試過,但我做不到得到的正確結果210

+0

你的名字太 –

+0

@Ryan Gadsdon需要組:第'a.name'在功能上依賴於'a.a_id'。所以不需要將它添加到「GROUP BY」 - 既不是由SQL標準也不是由MariaDB。 –

回答

0

只需添加額外JOINc這樣的:

SELECT a.name, COUNT(d.d_id), COUNT(b_id), SUM(cost) 
FROM a 
INNER JOIN d ON a.a_id = d.a_id 
INNER JOIN c ON c.b_id = d.c_id 
GROUP BY a.a_id, a.name 
2

你想數不同b_id

SELECT 
    a.name, 
    COUNT(DISTINCT c.b_id), 
    COUNT(d.d_id), 
    SUM(d.cost) 
FROM d 
JOIN a ON a.a_id = d.a_id 
JOIN c ON c.c_id = d.c_id 
GROUP BY a.a_id;