Математические операции в ORDER BY

Samail
На сайте с 10.05.2007
Offline
369
580

В таблице ads есть поле date_created данные в нем типа (2014-10-13 00:58:24) и поле views. Можно ли отсортировать строки по среднему числу просмотров в сутки?

B
На сайте с 23.05.2001
Offline
195
#1

Что в поле views?

В любом случае - Avg, Group by, Order by.

Samail
На сайте с 10.05.2007
Offline
369
#2
Basilisk:
Что в поле views?

только цифры

ДП
На сайте с 23.11.2009
Offline
203
#3

SELECT *,AVG(views),DATE_FORMAT(date_created ,'%Y-%m-%d') FROM ads GROUP BY DATE_FORMAT(date_created ,'%Y-%m-%d') ORDER BY AVG(views)

Вот такой код даст сортировку по среднему числу просмотров в сутки, но для каждых суток будет всего одна строка.

Если вам нужны все строки, но отсортированные в указанном порядке - видимо придётся что-то типа такого


SELECT c.*, avgviews FROM ads AS c INNER JOIN (
SELECT DATE_FORMAT(`date_created` ,'%Y-%m-%d') as `day`, AVG(views) as `avgviews` FROM ads GROUP BY DATE_FORMAT(`date_created` ,'%Y-%m-%d')
) as s
ON DATE_FORMAT(c.`date_created` ,'%Y-%m-%d') = s.day
ORDER BY avgviews

Этот sql на основе своей базы составлял, поэтому возможно, забыл какие-нибудь поля или таблицы переименовать - но для иллюстрации идеи, думаю, подойдет.

И очень сомневаюсь в плане оптимальности по ресурсам.

B
На сайте с 23.05.2001
Offline
195
#4
Samail:
только цифры

Нет, что оно означает? Количество просмотров?

Тогда непонятно, как это количество связано с date_created (то есть, с датой создания, а не с датами просмотра).

Samail
На сайте с 10.05.2007
Offline
369
#5
Тогда непонятно, как это количество связано с date_created (то есть, с датой создания, а не с датами просмотра).

Это количество просмотров за всё время. Делим его на разницу в днях, между датой создания и сегодняшней датой и получается среднее число просмотров в сутки.

B
На сайте с 23.05.2001
Offline
195
#6
Samail:
Это количество просмотров за всё время. Делим его на разницу в днях, между датой создания и сегодняшней датой и получается среднее число просмотров в сутки.

Ну вот, тогда совсем другой запрос получается, без avg и group by :)

Собственно, вы его сами уже и написали, просто словами.


SELECT date_created, views, views/(to_days(now()) - to_days(date_created)) as ViewsQuantityAvg
FROM `ads`
ORDER BY ViewsQuantityAvg

Вот формулируют так задачи, а потом жалуются, что программисты плохо задание выполняют :)

ДП
На сайте с 23.11.2009
Offline
203
#7

Order by ViewsAvg наверно

Мои запросы тогда не в тему, они на другие данные рассчитаны были.

B
На сайте с 23.05.2001
Offline
195
#8
Дикий пионер:
Order by ViewsAvg наверно
Мои запросы тогда не в тему, они на другие данные рассчитаны были.

Да, поправил, чтобы нагляднее было.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий