Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрос с группировкой и подсчетом сумм 
:(
    Опции темы
begin
Дата 12.3.2009, 01:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 415
Регистрация: 16.5.2007

Репутация: нет
Всего: нет



Есть таблица товаров:
Код

id_tovar
code
id_office
status


Нужно выбрать все id_tovar где status<3, но при этом нужно сгруппировать товары с одинаковым полем code, и подсчитать сколько их есть в каждом из филиалов (обозначены id_office).
Работаю с MySQL через BDE.

Подскажите, как можно составить такой запрос? Ничего на ум не приходит, кроме каких-то промежуточных запросов и временных массивов.
PM MAIL   Вверх
Akella
Дата 12.3.2009, 02:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



может меня кто поправит?
Код

select id_tovar, code, count(id_office) from table
group by 1, 2, 3
where status < 3

PM MAIL   Вверх
Данкинг
Дата 12.3.2009, 02:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Akella, а по вычисляемому полю (т.е. count) разве будет работать group ?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Akella
Дата 12.3.2009, 02:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



значит
Код

select id_tovar, code, count(id_office) from table
group by 1, 2
where status < 3

PM MAIL   Вверх
Frees
Дата 12.3.2009, 07:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 23
Всего: 54



Akella, в твоем примере count всегда 1 будет возвращать, т.к группировать ничего не будет потому что выбран id_tovar


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Akella
Дата 12.3.2009, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



и вообще group by  должен идти последним  smile  smile , да, вот я стормозил smile 

Это сообщение отредактировал(а) Akella - 12.3.2009, 13:13
PM MAIL   Вверх
Frees
Дата 12.3.2009, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 23
Всего: 54



Цитата(begin @  12.3.2009,  03:14 Найти цитируемый пост)
Нужно выбрать все id_tovar где status<3, но при этом нужно сгруппировать товары с одинаковым полем code, и подсчитать сколько их есть в каждом из филиалов (обозначены id_office).

1 запросом этого не сделать!либо выбирать id_tovar либо группировать, одновременно нельзя


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Akella
Дата 12.3.2009, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Код

select id_tov, code, count(id_office) from NEW_TABLE
where status < 3
group by 2, 1

PM MAIL   Вверх
Kbl4AH
Дата 12.3.2009, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 6
Всего: 15



Код

select id_office, count(id_tovar) from table
where id_tovar in (select id_tovar from table where status < 3 group by code)
group by id_office

ЗЫ. begin, ты, по-моему, сам не понял что спросил...
Приводи кусок таблицы и нужный результат и запрос тебе будет обеспечен! smile 
PM MAIL ICQ   Вверх
begin
Дата 12.3.2009, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 415
Регистрация: 16.5.2007

Репутация: нет
Всего: нет



Уточню: мне нужно подсчитать количество разных code в каждой из id_office.
Если в таблице будут такие данные:
Код

code   id_office
005    1
006    2
002    2
002    3
004    1
004    1
004    1
004    3
002    2
006    1

то запрос должен выдать такую таблицу:
Код

code id_office=1 id_office=2 id_office=3 id_office=4 id_office=5 id_office=6
002            0                2                1               0                   0               0
004            3                0                1               0                   0               0
005            1                0                0               0                   0               0
006            1                1                0               0                   0               0

PM MAIL   Вверх
Kbl4AH
Дата 12.3.2009, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 6
Всего: 15



Цитата(begin @  12.3.2009,  01:14 Найти цитируемый пост)
Нужно выбрать все id_tovar где status<3, но при этом нужно сгруппировать товары с одинаковым полем code, и подсчитать сколько их есть в каждом из филиалов (обозначены id_office).

Цитата(begin @  12.3.2009,  22:36 Найти цитируемый пост)
Уточню: мне нужно подсчитать количество разных code в каждой из id_office.

совершенно разные вещи...

Добавлено через 3 минуты и 30 секунд
Код

select code, decode(id_office, 1, count(id_office)), ...,  decode(id_office, N, count(id_office)) from table group by code

PM MAIL ICQ   Вверх
Kbl4AH
Дата 13.3.2009, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 6
Всего: 15



Нда, с запросом немного приврал (без компа делал)...
Вот работающий:user posted image
PM MAIL ICQ   Вверх
begin
Дата 13.3.2009, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 415
Регистрация: 16.5.2007

Репутация: нет
Всего: нет



Цитата(Kbl4AH @ 12.3.2009,  23:29)
Код

select code, decode(id_office, 1, count(id_office)), ...,  decode(id_office, N, count(id_office)) from table group by code

А после выполнения запроса из каких переменных брать количество каждого кода в каждом из филиалов? А то я что то запутался в вашем примере..
PM MAIL   Вверх
begin
Дата 13.3.2009, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 415
Регистрация: 16.5.2007

Репутация: нет
Всего: нет



Но это же BDE - там ведь нельзя использовать вложенные запросы. Разве нет?  smile 
PM MAIL   Вверх
Kbl4AH
Дата 13.3.2009, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 6
Всего: 15



Цитата(begin @  13.3.2009,  00:35 Найти цитируемый пост)
Но это же BDE - там ведь нельзя использовать вложенные запросы. Разве нет?

не знаю.... но мне кажется можно... для MySQL вместо decode - if
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.1344 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.