2015-04-12 1 views
1

У меня есть таблица с 6 по 7 столбцов в базе данных Postgres.Как получить произведение двух столбцов для каждой строки в таблице и порядке по результату двух столбцов desc postgre?

Мне нужно получить произведение двух столбцов, col1 и col2, для каждой строки в таблице и упорядочить по результату (по убыванию).

Я попытался следующие вещи, но не получили результаты, которые я ожидал ...

Первое:

SELECT SUM(col1 * col2) AS res 
FROM movies_b order by res desc; 

Но это дает мне одно значение для всех строк.

Второе:

SELECT col3, col4, col5, col6, SUM(col1 * col2) AS res 
FROM table 
ORDER BY res DESC 

Но это терпит неудачу с ошибкой:

ERROR: column "table.col3"must appear in the GROUP BY clause or be used in an aggregate function

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

Надеюсь, я поняла.

ответ

0

Если вы ошибаетесь, вы пытаетесь использовать агрегированные функции, такие как SUM. Если вы используете SUM, он добавит результат каждой строки и вернет это единственное число (которое вы узнали).

Что вы хотите, не связано с фактическим объединением данных из нескольких строк. Все, что вы хотите сделать, это упорядочить по результату col1*col2.

Ниже приведен пример запрос:

SELECT col1, col2, col3, col4, (col1*col2) AS product 
FROM movies_b 
ORDER BY (col1*col2) DESC 

Вы можете даже удалить эту последнюю часть SELECT линии, если вы хотите, просто убедитесь, что вы держите (col1*col2) в ORDER BY части.

SQL Fiddle is up here.

+0

спасибо, что сработало :) – virendrao

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