积木工具箱 发表于 2021-4-15 18:47

mysql请教

现有三个表 user 用户表 album 相册表 photo表

user 表结构
user_id //用户id
user_name; //用户名

album表结构
album_id //相册id
user_id //相册对应的用户id

photo表
photo_id //照片id
album_id //相册id


现在我想求每个用户的相册数量 该怎么写呢 这样好像不对 求大佬指教
select user.id,count(photo_id ) from user left joinalbumon user.user_id = album.user_id left join photo on album.album_id =photo.album_id

我想要的结果是
1 蔡旭坤 4(照片数量)
2 打篮球 3(照片数量)

ibilibili 发表于 2021-4-15 19:00

可以把整个表的数据读出来,用代码逻辑实现所需功能。

coolcalf 发表于 2021-4-15 19:13

select * from user as a
left join albuma s b on a.user_id=b.user_id
left join
(
select album_id,count(1) from photo as a
GROUP BY album_id
)c on b.album_id=c.lbum_id

年少不懂事 发表于 2021-4-15 19:51

ibilibili 发表于 2021-4-15 19:00
可以把整个表的数据读出来,用代码逻辑实现所需功能。

楼主应该要的是表连接查询sql 你说的这种方式在数据量很大的时候非常的好

SuperCC25513 发表于 2021-4-15 22:05

SELECT u.id,u.`name` count(p.photo_id ) as '照片数量'
from user u LEFT JOIN album a on u.id = a.user_id
LEFT JOIN photo p on p.album_id = a.id
group by u.id

看看这样是你想要的不

dukeimp 发表于 2021-4-15 23:40

select * from user
left join album    on user.user_id=user.user_id
left join
(
select album_id,count(1) from photo
GROUP BY album_id
)photoon album.album_id=photo.album_id

VioletKiss 发表于 2021-4-16 09:35

参考上面的
SELECT
        u.user_id,
        u.user_name,
        COALESCE( SUM(p.count),0 )
FROM
        USER u
        LEFT JOIN album a ON u.user_id = a.user_id
        LEFT JOIN ( SELECT album_id, count( album_id ) AS count FROM photo GROUP BY album_id ) p ON a.album_id = p.album_id
GROUP BY
        u.user_id,
        u.user_name;

页: [1]
查看完整版本: mysql请教