2015-06-17 3 views
0

У меня есть таблица под названием suburb_temperature, которая в основном содержит название пригорода, дату и температуру следующим образом.DB-MYSQL Справка по запросу для выбора где в

CREATE TABLE `test`.`suburb_temperature` (
    `idsuburb_temperature` INT NOT NULL AUTO_INCREMENT, 
    `suburb_name` VARCHAR(100) NOT NULL, 
    `time_value` DATETIME NOT NULL, 
    `degrees` DOUBLE NOT NULL, 
    PRIMARY KEY (`idsuburb_temperature`), 
    INDEX `suburb_temperature_idx1` (`suburb_name` ASC, `time_value` ASC, `degrees` ASC)); 

Затем я вставил некоторые данные в эту таблицу.

INSERT INTO `test`.`suburb_temperature` (`suburb_name`, `time_value`, `degrees`) VALUES ('SYDNEY', '2015-06-16', '11.5'); 
INSERT INTO `test`.`suburb_temperature` (`suburb_name`, `time_value`, `degrees`) VALUES ('SYDNEY', '2015-06-17', '12.5'); 
INSERT INTO `test`.`suburb_temperature` (`suburb_name`, `time_value`, `degrees`) VALUES ('ULTIMO', '2015-06-16', '11'); 
INSERT INTO `test`.`suburb_temperature` (`suburb_name`, `time_value`, `degrees`) VALUES ('ULTIMO', '2015-06-17', '11.9'); 
INSERT INTO `test`.`suburb_temperature` (`suburb_name`, `time_value`, `degrees`) VALUES ('PYRMONT', '2015-06-16', '12.4'); 
INSERT INTO `test`.`suburb_temperature` (`suburb_name`, `time_value`, `degrees`) VALUES ('PYRMONT', '2015-06-17', '12.8'); 
INSERT INTO `test`.`suburb_temperature` (`suburb_name`, `time_value`, `degrees`) VALUES ('RIVERWOOD', '2015-06-16', '13.1'); 
INSERT INTO `test`.`suburb_temperature` (`suburb_name`, `time_value`, `degrees`) VALUES ('RIVERWOOD', '2015-06-17', '12.7'); 

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

Я создал запрос, ниже которого выполняется, хотя проблема заключается в том, что результаты не возвращаются для пригородов, которые не существуют в таблице. E.G В запросе ниже я ввел HAYMARKET в качестве названия пригорода, которого не существует. Никакие результаты не возвращаются с названием пригорода HAYMARKET. Мне нужно увидеть HAYMARKET с нулем для min, max и average в результатах возврата. Кто-нибудь знает, как это можно добиться эффективно?

SELECT suburb_name, 
IFNULL(ROUND(avg(suburb_temperature.degrees),2),0) as 'SUBURB_AVG_TEMP_DEGREES_CELCIUS', 
IFNULL(ROUND(min(suburb_temperature.degrees),2),0) as 'SUBURB_MIN_TEMP_DEGREES_CELCIUS', 
IFNULL(ROUND(max(suburb_temperature.degrees),2),0) as 'SUBURB_MAX_TEMP_DEGREES_CELCIUS' 
FROM suburb_temperature 
WHERE suburb_name IN('HAYMARET','PYRMONT','RIVERWOOD','SYDNEY','ULTIMO') 
GROUP BY suburb_name 
ORDER BY suburb_name asc 

Результаты для вышеупомянутого запроса являются: Results

+0

Я добавил комментарий к своему ответу, пожалуйста, следуйте этим шагам. Ваша проблема будет решена. –

ответ

2

Я изменил свой SQL на основе ваших требований.

SELECT b.suburb_name, 
IFNULL(ROUND(AVG(a.degrees),2),0) AS 'SUBURB_AVG_TEMP_DEGREES_CELCIUS', 
IFNULL(ROUND(MIN(a.degrees),2),0) AS 'SUBURB_MIN_TEMP_DEGREES_CELCIUS', 
IFNULL(ROUND(MAX(a.degrees),2),0) AS 'SUBURB_MAX_TEMP_DEGREES_CELCIUS' 
FROM suburb_temperature AS a RIGHT JOIN (SELECT 'HAYMARET' AS 'suburb_name' UNION SELECT 'PYRMONT' AS 'suburb_name' UNION SELECT 'RIVERWOOD' AS 'suburb_name' 
UNION SELECT 'SYDNEY' AS 'suburb_name' UNION SELECT 'ULTIMO' AS 'suburb_name') AS b 
ON a.suburb_name = b.suburb_name 
GROUP BY suburb_name 
ORDER BY suburb_name ASC 

Я думаю, что ваша проблема будет решена.

спасибо.

+0

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

+0

Я получаю код ошибки: 1267. Недопустимое сочетание сортировок (latin1_swedish_ci, IMPLICIT) и (utf8_general_ci, COERCIBLE) для операции '=' –

+0

Я тестировал в своем локальном рабочем состоянии. –

Смежные вопросы