#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, ты хорош в том, что делаешь, очень признателен, хорошего вечера