Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




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, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
22227



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |