mysql - SQL - 连接多个表并 count()

标签 mysql sql join

我试图在加入表后计算列中的结果数,但我很难让查询正常工作。

在最终结果中,我需要获取一个包含产品 ID、产品名称和每个产品的媒体数量的表格

这是我到目前为止所拥有的:

SQL

select 
    p.id, 
    p.name, 
    count(distinct mp.media_id)
from products as p
left join medias_products as mp
    on mp.product_id = p.id
group by mp.media_id
order by p.id

这些是表格:

媒体

Id     | client id
------ | ---------
1      | 1
2      | 2

产品

id     | name     | client_id
------ | -------- | ---------
1      | product1 | 1
2      | product2 | 2

medias_products

product_id | media_id
---------- | --------
1          | 2
2          | 1

客户端

id     | name
------ | -----
1      | Peter
2      | John

此外,我想找到另一个查询,它可以为我提供按特定客户端 ID 过滤的结果。

有人可以阐明并分享知识吗?

提前致谢。

最佳答案

试试这个:

select 
    p.id, 
    min(p.name) as name, 
    count(distinct mp.media_id) as medias
from products as p
left join medias_products as mp
    on mp.product_id = p.id
group by p.id
order by p.id

对于您的第二个查询:

select 
    p.id, 
    min(p.name) as name, 
    count(distinct mp.media_id) as medias
from products as p
inner join medias_products as mp
    on mp.product_id = p.id
inner join medias as m
    on m.id = mp.media_id
inner join clients as c
    on c.id = m.client_id
where c.id = <your client's id>
group by p.id
order by p.id

关于mysql - SQL - 连接多个表并 count(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41174691/

相关文章:

mysql - 一次执行多个 laravel alter table migration 查询?

php - 如何在zend框架中进行Backing

mysql - 在同一列上选择不同的值

sql - 在没有游标的情况下合并单个SQL表中的数据

sql - 删除基于多列的重复记录

mysql - 用于获取没有请求的产品数量的查询

mysql - 创建表作为查询结果

mysql - 如何在mysql中同时使用NOT LIKE和JOIN?

sql - 如何在 MySQL 中进行 FULL OUTER JOIN?

php - 如何在不丢失行的情况下连接 3 个表?