Mysql 对多个联接表使用计数和分组方式

Mysql 对多个联接表使用计数和分组方式,mysql,sql,mariadb,Mysql,Sql,Mariadb,我想加入多个表,并需要使用分组依据 桌子不像这样 name | COUNT(b_id) | COUNT(d_id) | SUM(cost) -------------------------------------------- john | 2 | 3 | 425 david| 1 | 1 | 240 anna | 1 | 1 | 170 表A a_id |

我想
加入
多个表,并需要使用
分组依据

桌子不像这样

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

a_id | name          
------------         
1    | john           
2    | david
3    | anna
表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

我试过了,但无法得到正确的计数结果(b_id)

只需将额外的
JOIN
添加到表
c
,如下所示:

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

只需将额外的
JOIN
添加到表
c
,如下所示:

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

您要计算不同的
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;

您要计算不同的
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;

您需要按名称分组too@RyanGadsdon:No.
a.name
在功能上依赖于
a.a\u id
。因此,SQL标准和MariaDB都不要求将其添加到
分组方式中。您需要按名称分组too@RyanGadsdon:No.
a.name
在功能上依赖于
a.a\u id
。因此,无论是SQL标准还是MariaDB,都不需要通过
将其添加到
组中。