2013-07-26 29 views
0

我有兩個表:MySQL的場均連接表

salon_ranks

+-----------+-----------+-----------+-----------+ 
| salon_id |category_id| user_id | rank | 
+-----------+-----------+-----------+-----------+ 
|  10 |   1 |  999 |  1 | 
|  10 |   2 |  999 |  1 | 
|  10 |   1 |  888 |  5 | 
|  10 |   2 |  888 |  5 | 
+-----------+-----------+-----------+-----------+ 

categories

+------+-----------+ 
| id | name | 
+------+-----------+ 
| 1 | prices | 
| 2 | service | 
+------+-----------+ 

我試圖有效地得到的東西看起來是這樣的:

+-----------+-----------+-----------+ 
| salon_id |category_id| AVG(rank) | 
+-----------+-----------+-----------+ 
|  10 |   1 |  3 | 
|  10 |   2 |  3 | 
+-----------+-----------+-----------+ 

是什麼讓最有道理的,我就是這樣一個查詢:

SELECT salon_id, category_id, AVG(rank) 
FROM salon_ranks 
INNER JOIN categories ON category_id = id 
GROUP BY salon_id, category_id 

但由於某些原因,我沒有得到的平均水平,但得到這個:

+-----------+-----------+-----------+ 
| salon_id |category_id| AVG(rank) | 
+-----------+-----------+-----------+ 
|  10 |   1 |  1 | 
|  10 |   2 |  5 | 
+-----------+-----------+-----------+ 

任何想法爲什麼會發生?什麼可能是正確的查詢?


對不起,這是我的錯。我從我的原始表中獲取了錯誤的數據。 誤導你:(

+3

它應該給個正確的價值。 http://www.sqlfiddle.com/#!2/ee5c6/1 –

+4

必須有你沒有向我們展示的東西,因爲你的查詢很好。如果你不給我們一個有效的問題,我們不能回答。 – Barmar

回答

2

現在我們知道您的查詢工作正常,但它的使用別名表很好的做法實在不好意思。 這是沒有必要爲你的情況,但它使您的查詢更具可讀性和可擴展性。

SELECT SR.salon_id, SR.category_id, AVG(SR.rank) 
FROM salon_ranks SR 
INNER JOIN categories C ON SR.category_id = C.id 
GROUP BY SR.salon_id, SR.category_id 
+1

只有存在不明確的列時才需要別名,在這種情況下,原始查詢會報告錯誤。 – Barmar

+0

@Barmar我沒有找到OP的查詢返回錯誤結果的原因。所以,別名是我能建議他的唯一的東西。 – Parado

+1

我們期望來自提問者的貨物崇拜節目,回答者應該更清楚。 – Barmar