группировка mysql с неформатированными датами и автоматической суммой

#php #mysql

#php #mysql

Вопрос:

Я создаю поиск цен на жилье для своего сайта, и у меня есть данные земельного реестра для предыдущих продаж домов за последние 15 лет.

Я пытаюсь выполнить запрос mysql для поиска почтового индекса для предыдущих продаж домов, а затем сгруппировать их по годам, поэтому я ищу такой результат:

 2043    avg price was £158,000
2013    avg price was £135,000
2012    avg price was £128,000
and so on.
  

Мои данные хранятся в моей базе данных следующим образом :

 Date                    Street                   PostCode     Price

2014-03-24 00:00        24 HATHERLEY AVENUE      L23 0SD      192500
2013-03-24 00:00        12 staley road           L23 0SR      185000
2014-03-24 00:00        1  miitchell road        L23 0SD      212000
2013-03-24 00:00        2  black grove           L23 2PL      95000
2014-03-24 00:00        73 mark road             L23 4PL      275000
  

У меня есть следующий SQL-запрос:

 SELECT * FROM PricePaid ,
WHERE postCode = '$loc' 
ORDER BY Date DESC ");
  

В настоящее время я возвращаю результаты и вычисляю все средние значения с помощью php. Я знаю, что есть способ, которым я могу сделать это только в mysql, поскольку в этой базе данных миллионы строк, и я ищу потоковый способ сделать это.

Мой mysql не настолько хорош, может каким-то образом объяснить мне, как я могу сгруппировать год, а затем посчитать каждое свойство по годам, а также подсчитать цены, чтобы получить общее количество проданных объектов и общую цену за год, чтобы затем я мог рассчитать средние значения.

Очень признателен

Комментарии:

1. Ответы в вопросе: как я могу сгруппировать год — использование GROUP BY year .

Ответ №1:

Используйте GROUP BY

 SELECT YEAR(Date) AS year, AVG(Price) AS avg_price
FROM PricePaid
WHERE postCode = '$loc'
GROUP BY year
ORDER BY year DESC
  

Ответ №2:

 SELECT YEAR(Date),avg(Price) FROM PricePaid WHERE postCode=? GROUP BY 1 ORER BY 1 DESC;
  

Комментарии:

1. ВАУ, я ожидал длинных решений. Это именно то, что я искал, я понимаю это и только что попробовал, и это отлично работает для меня. Из интереса не могли бы вы объяснить, что делает группа по 1 порядку 1?

2. Если вы имеете в виду 1 , просто вместо указания имен столбцов или выражений вы можете указать, какой из (выходных) столбцов вы используете, поэтому 1 просто ссылается на YEAR(Date) . Если вы имеете в виду GROUP BY , ну, это делает именно это, группируйте строки, которые имеют одинаковое значение для данного столбца (столбцов). Затем вы можете использовать агрегированные функции (например count , sum , avg , min , max …) для других столбцов.

3. Еще раз спасибо, jcaron, ты хорош в том, что делаешь, очень признателен, хорошего вечера