首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用join在3个表上计算列数据

如何使用join在3个表上计算列数据
EN

Stack Overflow用户
提问于 2017-04-18 15:59:13
回答 4查看 55关注 0票数 0

我有三张桌子

代码语言:javascript
复制
tbl_product 
item_id | item_name

company_details
v_id | item_id | company_name

user_ratings 
r_id | rate | v_id 

我想要计算利率,同时也要得到公司的利率。下面是我的问题

代码语言:javascript
复制
SELECT  company_details.v_id,
        company_details.company_name,
        COUNT(user_ratings.rate) as vote,
        user_ratings.rate,
        tbl_product.item_name
FROM    company_details
LEFT JOIN tbl_product ON tbl_product.item_id = company_details.item_id
LEFT JOIN user_ratings ON user_ratings.v_id = company_details.v_id
GROUP BY company_details.v_id, user_ratings.rate

这是我在这个查询后得到的Whts:

代码语言:javascript
复制
v_id  company_name           vote  rate  item_name  
1     The Oberoi Udaivilas   1     4     5 Star Hotels  
1     The Oberoi Udaivilas   1     5     5 Star Hotels  
2     The Taj Mahal Palace   2     5     4 Star Hotels  
3     Rambagh Palace         1     5     3 Star Hotels  
4     Taj Lake Palace        1     5     5 Star Hotels  
5     Windflower Hall        1     3     2 Star Hotels  
5     Windflower Hall        1     5     2 Star Hotels  
6     Leela Palace Kempinski 0     n     4 Star Hotels  
7     Umaid Bhawan Palace    0     n     4 Star Hotels  
8     Hotel Ratan Vilas      0     n     4 Star Hotels  
9     The Leela Palace       0     n     4 Star Hotels  
10    The Imperial Hotel     0     n     3 Star Hotels  

您可以看到投票列不计入。

这就是我所期待的

代码语言:javascript
复制
v_id  company_name          vote  rate  item_name   
1     The Oberoi Udaivilas  2     5     5 Star Hotels   
2     The Taj Mahal Palace  2     5     4 Star Hotels   

但是这个查询没有计算user_ratings表中的比率,因为我还想获得比率,如果我从select子句中删除user_ratings.rate,则此查询可以工作,但是当我在select子句中添加投票时,此查询不会将比率计数为( user_ratings.rate ),并且在每次计数中都会返回一行。

EN

回答 4

Stack Overflow用户

发布于 2017-04-18 16:27:40

您应该从group by子句中删除user_ratings.rate并添加tbl_product.item_name。

代码语言:javascript
复制
SELECT
    company_details.v_id,
    company_details.company_name,
    tbl_product.item_name,
    COUNT(user_ratings.rate) as vote,
    avg(user_ratings.rate) as rate
FROM
    company_details
    LEFT JOIN tbl_product ON tbl_product.item_id = company_details.item_id
    LEFT JOIN user_ratings ON user_ratings.v_id = company_details.v_id
GROUP BY company_details.v_id, company_details.company_name, tbl_product.item_name;
票数 1
EN

Stack Overflow用户

发布于 2017-04-18 16:27:31

在我看来,您的查询似乎只缺少rate列上的聚合,从预期输出来看,我认为它是一个max。你也应该修复你的group by。试试这个

代码语言:javascript
复制
SELECT  company_details.v_id,
        company_details.company_name,
        COUNT(user_ratings.rate) as vote,
        MAX(user_ratings.rate) as rate,
        tbl_product.item_name
FROM    company_details
LEFT JOIN tbl_product ON tbl_product.item_id = company_details.item_id
LEFT JOIN user_ratings ON user_ratings.v_id = company_details.v_id
GROUP BY company_details.v_id,
         company_details.company_name,
         tbl_product.item_name
票数 0
EN

Stack Overflow用户

发布于 2017-04-18 16:37:48

查询和结果都正确。看看这个速度

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43466733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档