如何在mysql查询中获得每条记录的计数

q1qsirdb  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(272)

我有两张mysql表, users 以及 orders 跟踪每个用户下的订单。
我想得到每个用户的列表,以及订单总数。
对于个人而言,我可以使用:

SELECT users.name, (select count(*) from orders where orders.users_id = 1) as total
from users
where users.id = 1

有没有一种有效的方法可以同时为所有用户做到这一点?

qacovj5a

qacovj5a1#

您可以使用相关的子查询来完成。

SELECT users.name, (select count(*) from orders where orders.users_id = users.id) as total
from users

但更好的方法是加入。

SELECT users.name, IFNULL(COUNT(orders.id), 0) AS total
FROM users
LEFT JOIN orders ON orders.users_id = users.id
GROUP BY users.id

实际上,最好使用聚合的子查询进行连接,而不是在连接后进行聚合:

SELECT u.name, IFNULL(o.total, 0) AS total
FROM users as u
LEFT JOIN (
    SELECT users_id, COUNT(*) AS total
    FROM orders
    GROUP BY users_id) AS o ON u.id = o.users_id
xwbd5t1u

xwbd5t1u2#

您也可以这样做,在这种情况下,只有在订单上有记录时才会返回:

SELECT users.name, count(*) 
     from users
     join orders On orders.users_id = users.id  

    group by users.name
jei2mxaa

jei2mxaa3#

关键是一个团队:

SELECT u.id, u.name, COUNT(*)
FROM users u
INNER JOIN orders o ON u.id = o.users_id
GROUP BY u.id, u.name

相关问题