2016-08-16 47 views
0

反饋表列和單個特定行

------------------------------- 
|rating|feedback|feedback_date| 
------------------------------- 
| 5 | good | 1452638788 | 
| 1 | bad | 1452638900 | 
| 0 | ugly | 1452750303 | 
| 3 | ok  | 1453903030 | 
------------------------------- 

期望結果

average_rating | rating | feedback | feedback_date 
2.25   | 3  | ok  | 1453903030 

的選擇AVG是否有可能(在單個查詢中)選擇一列,並且還一個的平均表中的特定行?

例如,我想檢索列rating和最近一行的整體平均值。

我試過以下內容,並且ORDER BY方向也是DSC,但他們都給了我average_rating和表中的第一行。

SELECT AVG(f.rating) AS average_rating, f.* FROM feedback f ORDER BY feedback_date ASC 
+0

混合聚合和非聚合字段通常不是一個好主意。聚合將多個記錄摺疊成單個記錄,並且沒有具體保證WHICH記錄被用作非聚合字段的來源。 –

回答

2
SELECT * FROM feedback NATURAL JOIN (
    SELECT AVG(rating), MAX(feedback_date) feedback_date FROM feedback 
) t 

看到它的sqlfiddle

2

你可以用這樣的 SELECT AVG(f.rating) AS average_rating, t1.* FROM feedback f inner join (select * from feedback order by feedback_date asc limit 1) t1 on true

1

一個子查詢做到這一點,你可以把一個子查詢SELECT子句中,並計算在子查詢的平均值。

SELECT (SELECT AVG(rating) FROM feedback) AS avg_rating, feedback.* 
FROM feedback 
ORDER BY feedback_date DESC 
LIMIT 1 
+0

您在...中遇到錯誤 – Strawberry