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,都不需要通过
将其添加到组中。