Найти пользователя с более высокой прибылью в таблице postgresql - PullRequest
0 голосов
/ 18 мая 2018

У меня есть таблица в моей базе данных, структура которой выглядит следующим образом

sell_id(int) | car_id(int) | worth(int) | date(date) | selled(boolean)

Продано неправильно - продано.

Моя таблица похожа на это

------------------------------
50 |50 |2405 | "2012-07-16" | false
51 |51 |9300 | "2014-10-07" | false
52 |52 |5963 | "2014-11-01" | false
53 |53 |2036 | "2014-09-19" | false
54 |54 |4770 | "2014-01-26" | false
55 |55 |11915| "2010-08-30" | true

В любом случае, sell_id является первичным ключом этой таблицы и внешним ключом для «материнской» таблицы.car_id также относится к другой таблице.Стоит сумма денег, которую продавец продал или купил автомобиль.Дата - только когда и проданный является логическим, чтобы указать, продал ли продавец автомобиль или купил.Если это правда, то он продал это.В противном случае он купил его.

Теперь я хочу найти пользователя, который извлек наибольшую выгоду из продажи / покупки.Это означает, что он должен быть тем, у кого продается купленный. Но я не могу определить правильный запрос.

этот запрос дает мне значения только продажи.

select sell_id, sum(worth), selled 
from sellers 
where(selled=true) 
group by sell_id, selled

НекоторыеНапример, желаемый результат будет:

sell_id | total_profits(max)
---------------------------
  51    |     2000

, где total_profits будет максимальной стоимостью (где selled = true) -worth (где selled = false)

Любые идеи будут действительно полезны.Спасибо:)

Ответы [ 2 ]

0 голосов
/ 20 мая 2018

я наконец нашел ответ на свой вопрос.правильный запрос:

select sell_id, (sum(worth) - (select sum(worth) 
   from sellers where selled=false group by sell_id 
       order by sum limit 1)) as final from sellers 
             where selled=true   
            group by sell_id order by final desc limit 1
0 голосов
/ 18 мая 2018

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

select sell_id, sum(worth), selled 
into #sell
from sellers 
where(selled=true) 
group by sell_id, selled

select sell_id, sum(worth), selled 
into #buy
from sellers 
where(selled=false) 
group by sell_id, selled

select a.sell_id, sum(a.worth-b.worth) as 'Total'
from #sell a
join #buy b on a.sell_id = b.sell_id
group by a.sell_id

Возможно, вам потребуется настроить объединение, если прямое объединение исключает ожидаемые записи.Как вы заметили, временные таблицы не работают для вас, возможно, попробуйте это.

select sell_id, sum(sum(worth)-b.worth), selled 
from sellers a
join (select sell_id, sum(worth) as 'worth' from sellers where(selled=false) 
group by sell_id) b on a.sell_id = b.sell_id
where(selled=true) 
group by sell_id, selled

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

...