首页 > 解决方案 > 在 MySQL 中对 3 个表使用内连接,计算单个表中出现的值

问题描述

我正在尝试在 MySQL 中加入 3 个表。

SELECT location_details.location_name, count(click_details.click_id) 
FROM location_details
INNER JOIN hotel_details ON hotel_details.location_id = 
location_details.location_id 
INNER JOIN click_details ON click_details.hotel_id = hotel_details.hotel_id

我想根据来自该位置的点击次数收集每个位置的出现次数。

相反,我最终得到了一个值,在这种情况下是“伦敦”,所有点击都归因于它,显然情况并非如此。

以下是我的数据库的架构:

click_details

click_id STRING
click_timestamp TIMESTAMP
hotel_id STRING
partner_id STRING
session_id STRING

hotel_details

hotel_id STRING
hotel_name STRING
hotel_star INTEGER
location_id STRING

location_details

location_id STRING
location_name STRING
country_id STRING

任何帮助将非常感激!:)

非常感谢你。

标签: mysqlsql

解决方案


你错过了group by. 我建议对查询进行一些其他更改:

SELECT l.location_name, COUNT(c.click_id) 
FROM location_details l INNER JOIN
     hotel_details h
     ON h.location_id = l.location_id INNER JOIN
     click_details c
     ON c.hotel_id = h.hotel_id
GROUP BY l.location_name
ORDER BY COUNT(c.click_id) DESC;

注意表别名的使用。这些使查询更易于编写和阅读。

在几乎任何数据库中——包括具有默认设置的最新版本的 MySQL——你的查询都会产生错误,因为你有COUNT()一个未聚合的列在SELECT, 没有GROUP BY.


推荐阅读