powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / помогите с запросом типа (количество, в том числе)
9 сообщений из 9, страница 1 из 1
помогите с запросом типа (количество, в том числе)
    #32642818
Maker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть таблица,
категория товара
id, name

товар, связанная с категорией по code_cat.
id, code_cat, name, price

необходимо получить что-то вроде
категория.name, общее количество товара для категории, число товара < 5, число товара > 5, суммарная стоимость
...
Рейтинг: 0 / 0
помогите с запросом типа (количество, в том числе)
    #32642849
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видятся мне подзапросы с ограничениями.
Хотя, эффективность будет "не очень".
Может кто что альтернативное предложит?
...
Рейтинг: 0 / 0
помогите с запросом типа (количество, в том числе)
    #32642922
Лентяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МимопроходящийВидятся мне подзапросы с ограничениями.
Хотя, эффективность будет "не очень".
Может кто что альтернативное предложит?
Having + Union
...
Рейтинг: 0 / 0
помогите с запросом типа (количество, в том числе)
    #32643018
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛентяйHaving + UnionЕсли я правильно понял задачу, то UNION [ALL] не катит.
...
Рейтинг: 0 / 0
помогите с запросом типа (количество, в том числе)
    #32643121
Лентяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий ЛентяйHaving + UnionЕсли я правильно понял задачу, то UNION [ALL] не катит.
Ну может я неправильно понял: думал, что в категории может быть товара либо больше, либо меньше 5 (про = автор как-то забыл) и, соответственно кол-во должно появляться в том или ином столбце. То есть одна часть категорий попадет под условие Having Sum(...) > 5 (в одну часть Union-a), а остальные в другую часть.
...
Рейтинг: 0 / 0
помогите с запросом типа (количество, в том числе)
    #32643609
Maker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
это всё конечно хорошо, но хорошо было бы посмотреть на хоть примерный запросик.
...
Рейтинг: 0 / 0
помогите с запросом типа (количество, в том числе)
    #32644153
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Makerэто всё конечно хорошо, но хорошо было бы посмотреть на хоть примерный запросик.Нам тоже.
...
Рейтинг: 0 / 0
помогите с запросом типа (количество, в том числе)
    #32644599
Лентяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий Makerэто всё конечно хорошо, но хорошо было бы посмотреть на хоть примерный запросик.Нам тоже.
Да, похоже я не так понял. Придется отмазываться...
Как я теперь понял задачу (кое что пришлось предполагать и домысливать) :
таблица товаров -
Код: plaintext
1.
2.
3.
4.
5.
CREATE TABLE TOV (
    IDTOV  INTEGER NOT NULL,
    IDCAT  INTEGER,
    NMTOV  VARCHAR( 10 ),
    PRICE NUMERIC ( 15 . 2 )
);
категории -
Код: plaintext
1.
2.
3.
CREATE TABLE CAT (
    IDCAT  INTEGER NOT NULL,
    NAME   VARCHAR( 10 )
);
остатки -
Код: plaintext
1.
2.
3.
4.
CREATE TABLE OST (
    IDOST  INTEGER NOT NULL,
    IDTOV  INTEGER,
    KOL    INTEGER
);
Нужно выбрать суммарное количество товаров по категории, "число < 5", я так понимаю, это суммарное количество товаров в категории с остатком <= 5, "число > 5" - соответственно наоборот, общую стоимость товаров в категории.
Тогда, при наличии FB 1.5, подойдет такой запрос:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select c.name, sum(o.kol)
sum (case when o.kol <=  5  then o.kol else  0  end),
sum (case when o.kol >  5   then o.kol else  0  end),
sum (o.kol*t.price)
from ost o
join tov t on o.idtov = t.idtov
join cat c on t.idcat = c.idcat
group by c.name
Если я опять что-то не так понял - сформулируй вопрос попонятнее...
...
Рейтинг: 0 / 0
помогите с запросом типа (количество, в том числе)
    #32645127
Maker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всё правильно, только везде подразумевалось количество товара для категории, дело в том, что в категории не может быть одинаковых наименований товара, поэтому пока выкрутился так:
добавил для категории дополнительные поля
kol и price

перед запросом обновляем эти поля следующим образом
Код: plaintext
1.
2.
3.
4.
5.
update cat set
cat.kol=(select count(tov.id) from tov where tov.idkat=cat.id)

update cat set
cat.price=(select sum(tov.price) from tov where tov.idkat=cat.id)

а затем

Код: plaintext
1.
2.
3.
4.
5.
6.
select c.name, sum(c.kol),
    sum(case when c.kol <= 5  then c.kol else  0  end),
    sum(case when c.kol >  5   then c.kol else  0  end),
    sum(c.price)
from cat c
group by c.name


P.S. Спасибо за идею Лентяю.
P.P.S. вообще было бы круто без использования этих дополнительных полей, но пока чё то не придумывается
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / помогите с запросом типа (количество, в том числе)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]