mysql - 跨两个表进行计数

标签 mysql sql

我有一个 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/

相关文章:

mysql - mysql 如何获取一张表的所有数据?

mysql - 如何导出Postgresql数据库,以便在MySQL中使用?

php - MYSQL:除最高和最低值外的总计值然后相乘

mysql - SQL 错误 - 在没有 key 长度的 key 规范中使用了 BLOB/TEXT 列 'url'

mysql - 我想将日期列从 '26-01-2016' 格式反转为 '2016-01-26'

android - 使用 where 条件进行 Sqlite 查询需要满足多个条件

mysql - 从用户和关注用户中选择帖子的 SQL 查询不包括自己的帖子

mysql - 在 SQL 中使用正则表达式更新字符串

java - 在执行查询且未进行任何更改(自动提交为 "off")后,我们是否需要 commit() 数据库连接?

sql - 需要查询来查找可能有 4、5 或 6 个连续数字的行