| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > SQL. Можно ли один запрос на сумму и кол-во сразу? |
| Автор: Nowichok 18.8.2009, 06:23 | ||
| Имеются таблицы: Uchrezdenie Smeta Нужно получить сумму полей из таблицы Uchrezdenie по округу 'ЦАО' (к примеру). Так же нужно получить кол-во смет на этот же округ. (таблицы связаны между собой полем ID_uch). По идее можно и в два отдельных запроса делать, но хочется, чтобы код был компактным, тем более таблицы то связаны меж собой. Пытаюсь написать:
Этот запрос даже обрабатывается, НО - цифры получаются неверные. И даже не смог понять, откуда эти цифры. Возможно ли вообще сделать, как я хочу ? |
| Автор: Ипатьев 18.8.2009, 07:52 |
| Вы хоть понимаете, что выбираете не из таблицы "смета" и таблицы "учреждение", а из результирующей таблицы, которая является произведением этих двух? |
| Автор: pavelv 18.8.2009, 08:22 |
| Да запрос действительно непонятно, что вернёт. Тоесть при некоторых условиях наложенных на таблицы, при учете что в таблице смета всегда есть данные для таблицы учреждения там может и получится что-то похожее на правду. Это так навскиду. Однако к вам вопрос, поле Id_uch уникальное для какой-то из таблиц, или для обеих сразу? Думаю когда вы ответите на этот вопрос сами напишите ответ к теме, ну нет так поможем |
| Автор: kobra 18.8.2009, 09:12 | ||
| да... кажется ви совсем запутаите человека
left join нужен чтобы не потерять те учереждения, для которых нет смет. |
| Автор: pavelv 18.8.2009, 10:19 |
| kobra, а если на каждый Uchrezdenie.Id_uch приходится несколько(N штук) Smeta.Id_uch, то какое число у тебя получится в Sum(Uchrezdenie.Summa_po_planu)? умноженное на N наверное должно быть, если конечно я не путаю ничего? Да и условия where не хватает на Uchrezdenie.Okrug='ЦАО'? И плюс ко всему в Count не учитывается, что туда могут попасть NULL элементы, а это минус -1 нужно сделать. Не судите строго если чво неправильно сказал |
| Автор: Nowichok 18.8.2009, 17:33 |
| Ээээм. ID_uch - ключевое и неповторимое поле у Uchrezdenie У сметы ключевое поле другое - n_smeti одному учреждению может приходиться несколько смет. Но одна смета может быть только на одно учреждение. Собственно, думаю, что легче сделать отдельными зпросами. Уже сделал. Просто интересно было |
| Автор: pavelv 20.8.2009, 13:04 | ||||
На каждую запись в Учреждении появится по несколько записей смет и в этом случае Sum(Uchrezdenie.Summa_po_planu) должно вернуть сумму всех записей. Почему вы думаете, что group by за вас будет отбрасывать записи в сум и не будет этого делать в count? Возможно есть какие-то стандарты sql которых это и будет выполнено, но кароче что-то я недогоняю.
видимо не понимаем друг друга. Условие where отличается от условий left join. Если добавить условие по округу в where оно автоматически попадёт в Left, а наоборот просто на каждую запись которая не является округом ЦАО не будет выборки из таблицы смета. Блин надеюсь пояснил мысль Про каунт ты прав конечно, я немного о другом говорил. Имелось ввиду, что если просто делать коунт записей(по *)...если по ид сметы, то всё будет нормально. |
| Автор: kobra 20.8.2009, 14:15 | ||||
|