反馈表
-------------------------------
|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
是否可以(在单个查询中)从表中选择一列的平均值以及一个特定的行?
例如,我想检索列rating
和最近一行的平均值。
我尝试了以下操作,并将ORDER BY
方向设为DSC
,但他们都给了我average_rating
和表格中的第一行。
SELECT AVG(f.rating) AS average_rating, f.* FROM feedback f ORDER BY feedback_date ASC
答案 0 :(得分:2)
SELECT * FROM feedback NATURAL JOIN (
SELECT AVG(rating), MAX(feedback_date) feedback_date FROM feedback
) t
在sqlfiddle上查看。
答案 1 :(得分: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
答案 2 :(得分:1)
您可以在SELECT (SELECT AVG(rating) FROM feedback) AS avg_rating, feedback.*
FROM feedback
ORDER BY feedback_date DESC
LIMIT 1
子句中放置子查询,并计算子查询中的平均值。
{{1}}