2017-04-18 59 views
0

指望我有三个表如何使用列数据加入了3个表

tbl_product 
item_id | item_name 

company_details 
v_id | item_id | company_name 

user_ratings 
r_id | rate | v_id 

我要计数率,也得到了公司的速度。这里是我的查询

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我是这个查询后四处:

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 

你可以看到投票列不计。

这是我期待

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表计数率,因为我也想获得率,如果删除user_ratings.rateselect条款,那么这查询工作,但是当我在select子句中添加user_ratings.rate时,则此查询不计算速率为(投票),并且它在每个计数中都以一行形式返回。

+0

你真的应该提供样品的输入和预期的输出,因为从你的描述它在所有目前尚不清楚是什么你问 –

+0

如果,在你的输出,你想让它按公司划分,应该是在你的小组通过条款。 –

+0

我仍然得到相同的结果 –

回答

0

在我看来,您的查询只是在rate列中缺少一个聚合,并且从预期输出我会说这是一个max。你也应该修复你的group by。试试这个

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 
1

你应该从GROUP BY子句除去user_ratings.rate并添加tbl_product.item_name

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; 
+0

你应该给你的答案提供一些上下文,因为只有代码的答案能够理解什么是错的,什么更难更难 –

+0

Thank You Guys ...它的工作 –

0

查询和结果都是正确的。查看速率

0

你可以尝试这个查询,它会根据你给定的3个表返回你的输出。

"select c.v_id , c.company_name , u.rate , p.item_name from company_details c join tbl_product p on p.item_id = c.item_id join user_details u on c.v_id = u.v_id group by c.company_name ";