2016-08-16 4 views
0

таблицы обратной связиВыберите AVG столбца и одной конкретной строке

------------------------------- 
|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

Смешанные агрегированные и неагрегатные поля, как правило, не являются хорошей идеей. агрегация сворачивает несколько записей в одну запись, и нет никакой конкретной гарантии того, что запись 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