2016-05-03 4 views
2

я следующие столбцы в моей таблице:Проблема с SUM столбцов и группы по

name | columnA | columnB 

И я пытаюсь вызвать следующий запрос:

SELECT name, columnA + columnB AS price 
FROM house 
WHERE NOT (columnA IS NULL OR columnB IS NULL) 
GROUP BY name 
ORDER BY price 

Который бросает мне:

house.columnA должен находиться в предложении GROUP BY. - Я не знаю, как я должен это понимать.

То, что я хочу сделать, это получить таблицу, где у меня будет name из house, и столбец price, который будет равен columnA + columnB, только если оба из колонок не нуль. И я бы хотел отсортировать его по расчетной цене.

Где я совершаю ошибку?

+1

Почему у вас «группа по» вообще? Вы не используете какие-либо агрегаты. –

+1

Разве имена не уникальны? Может ли одно имя отображаться в нескольких строках? – jarlh

ответ

2

Есть два варианта:

Вариант 1 - Группа по не требуется. Это произойдет в случае, если есть одна строка для каждого имени, в данном случае:

SELECT name,columnA+columnB as price 
FROM house 
WHERE columnA is not null 
AND columnB is not null 
ORDER BY price 

Вариант 2 - группы по необходимости, и это означает, что у вас есть более 1 строка для каждого имени, и в этом случае следует использовать SUM:

SELECT name,sum(columnA+columnB) as price 
FROM house 
WHERE columnA is not null 
AND columnB is not null 
GROUP BY name 
ORDER BY price 
0

Попробуйте один

SELECT name, SUM(columnA + columnB) AS price 
FROM house 
WHERE NOT (columnA IS NULL OR columnB IS NULL) 
GROUP BY name 
ORDER BY price 
-1

ошибка означает, что вы должны добавить Columna, а также columnB в GROUP BY п SELECT name, columnA + columnB AS price FROM house WHERE NOT (columnA IS NULL OR columnB IS NULL) GROUP BY name, columnA ORDER BY price

0

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

это как совокупная функция сумма может быть использована для расчета цены для всех домов на улице:

select street, sum(columnA + columnB) as price_per_street 
from houses 
where columnA is not null and columnB is not null 
group by street 
order by price; 

это должно быть то, что вы ищете:

SELECT name, columnA + columnB AS price 
FROM house 
WHERE columnA IS NOT NULL AND columnB IS NOT NULL 
ORDER BY price