我有一个 mysql 数据库,其中有两个表:预订表和用户表。
它们通过预订表中的外键 user_id
链接。
我如何显示每个用户的预订数量。
我一直在尝试此查询的变体:
select first_name, last_name, count(*)
from bookings
left join users on bookings.user_id
group by user_id
order by count(*);
但是它锁定数据库的时间非常长。
最佳答案
首先,您的 ON 子句不完整。通常它会是ON X=Y
,你有ON X
。这很重要,因为您正在告诉数据库如何链接两个表。我猜这是浪费时间最多的地方。
其次,此处使用的 LEFT JOIN 没有用(除非您想要没有用户的预订。)尝试 INNER JOIN。
第三,作为一般规则,最好执行 SmallTable INNER JOIN BigTable
(并非总是如此,您的情况可能会有所不同。)
第四,如上所述,为 ORDER BY 子句使用别名。
尝试:
select first_name, last_name, count(*) as cnt
from users
inner join bookings on bookings.user_id = user.id
group by user_id
order by cnt;
关于mysql - 跨两个表进行计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7877262/