|
MySQL.RU - Webboard
Вернуться
помогите составить sql запрос (2) (Raphael) 06/05/2004 - 02:15:39
Re: поточнее (Sam) 06/05/2004 - 14:39:45
Re: поточнее (Raphael) 06/05/2004 - 15:09:58
Re: поточнее (Raphael) 06/05/2004 - 15:10:11
Re: sql запрос с использованием вложеных! (Raphael) 07/05/2004 - 00:26:32
Re: так? (Sam) 07/05/2004 - 02:01:32
Re: Сумма контракта (Sam) 07/05/2004 - 02:05:18
Re: не так (Raphael) 07/05/2004 - 14:02:17
Re: наверное так (Sam) 07/05/2004 - 22:12:31
Re: подзапросы не работают (Raphael) 08/05/2004 - 02:14:08
Re: так? (Kroha) 27/05/2005 - 13:14:34
> Original message text:
> From: Raphael - 06/05/2004 - 02:15:39
> Subject: помогите составить sql запрос (2)
> -----------------
> Здравствуйте, помогите составить sql запрос
> есть 2 таблицы
> 1 - список контрактов,
> contracts
> contract_id
> 2 - список предложений по покупке/продаже этих контрактов
> proposals
> proposal_price
> proposal_quantity
> proposal_contract_id
>
> требуется выбрать все контракты, с максимальной ценой покупки и
> продажи и количеством акций.
>
> я пока скачиваю все таблицы в php и вручную обрабатываю массивы
> первый запрос
>
> SELECT * , sum( IF (proposal_quantity <0, -proposal_quantity, 0) ) AS n_ask,
> sum( IF (proposal_quantity >0, proposal_quantity, 0) ) AS n_bid
> FROM `proposals`
> GROUP BY `proposal_price`
>
> теперь в получившився результате надо бы взять максимум proposal_price и сгрупировать по proposal_contract_id
>
> и последнее
> SELECT * FROM `contracts`
> LEFT JOIN (тот результат который получился после суммирования и взятия максимума) ON (proposal_contract_id = contract_id)
>
> ну хоть как нибудь и гденибудь переложить часть работы на базу, а то я всё делаю в скрипте и боюсь в будущем перестану укладыватся в ограничения.
>
From: Raphael - 07/05/2004 - 14:02:17
Subject:не так
-----------------
чето совсем не то, мне надо проссумировать количество акций
proposal_quantity
для максимальной цены для данного контракта
нужно выбрать 3 поля
contract_id
max(proposal_price) ГДЕ proposal_contract_id = contract_id
sum(proposal_quantity) ГДЕ proposal_contract_id = contract_id И proposal_price = max(proposal_price)
а нормальной форме она конечно соответсвует, тут всего 2 таблицы
contracts - информация об акции(имя, описание, даты)
proposals - предложения о покуке продаже(
proposal_price - цена предлагаемая за акцию
proposal_quantity - количество предлагаемых акций
proposal_contract_id - ссылка на описание акции )
но за книжку спасибо.
а запрос
SELECT c.contract_id, max(p.proposal_price) as price, sum(p.proposal_quantity) FROM contracts c, proposals p
WHERE p.proposal_contract_id = c.contract_id
GROUP BY c.contract_id
суммирует всё подряд для данного контракта,
допустим есть несколько предложений
proposals
proposal_price | proposal_quantity | proposal_contract_id
50 | 30 | 1
50 | 20 | 1
30 | 45 | 1
31 | 11 | 1
нужно выбрать максимум(proposal_price) = 50, и проссумировать(proposal_quantity) только 30+20
пробовал писать так
SELECT c.contract_id, max(p.proposal_price) as price, sum(p.proposal_quantity) FROM contracts c, proposals p
WHERE p.proposal_contract_id = c.contract_id
AND p.proposal_price = price
GROUP BY c.contract_id
но сам понимаешь ещё не вычисленный максимум в условие не засунешь.
я тут думаю может сделать 2 запроса, сначала выбрать максимумы, а потом для них суммы.
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
22227
|
|