2017-04-18 56 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 ";