powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Подскажите как составить запрос
8 сообщений из 8, страница 1 из 1
Подскажите как составить запрос
    #33896541
-Zed-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Субд - postgesql 8.1 (Win)
Есть таблица такого вида

Статус | Работник | Вид работ
1 1 1
1 2 2
2 1 1
1 1 2
2 2 3
1 1 2
3 2 3
3 1 2

Нужно получить такую таблицу

Всего | Вид=1 | Вид=2 | Вид=1 и Раб.=1
8 2 4 1

конструкция
Select (
Select ....
Select ....
)
работает очень медленно, долго обрабатывает (хоть и записей 5000)

Подскажите в каком направлении читать, какие функции использовать
...
Рейтинг: 0 / 0
Подскажите как составить запрос
    #33896801
читать про индексы, и про Join.

И не совсем понятно, что за колонка "Всего" со значением 8
...
Рейтинг: 0 / 0
Подскажите как составить запрос
    #33896826
Владимор Конев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Автор.
У тебя число видов работ ограничено?
Если да, то сколько их может быть?
Кроме того, куда девается статус?


-----------------------------------------------------------------------------------------------------------------------------------------
З.Ы.
Неспешно ищу работу, согласен на переезд в Москву или Питер
...
Рейтинг: 0 / 0
Подскажите как составить запрос
    #33896845
domanix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я не спрашиваю зачем это надо - просто отвечаю на вопрос.
Пробуй так - в этом случае ты получишь результат за один проход по таблице...
Код: plaintext
1.
2.
3.
4.
5.
6.
Select 
sum(*) as "Всего",
sum(case when "Вид работ"= 1  then  1   end) as "Вид=1",
sum(case when "Вид работ"= 2  then  1   end) as "Вид=2",
sum(case when "Вид работ"= 1  then  case "Работник"= 1   then  1  end  end) as "Вид=1 и Раб.=1"
from table
...
Рейтинг: 0 / 0
Подскажите как составить запрос
    #33896993
Владимор Конев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
domanixЯ не спрашиваю зачем это надо - просто отвечаю на вопрос.
Пробуй так - в этом случае ты получишь результат за один проход по таблице...
Код: plaintext
1.
2.
3.
4.
5.
6.
Select 
sum(*) as "Всего",
sum(case when "Вид работ"= 1  then  1   end) as "Вид=1",
sum(case when "Вид работ"= 2  then  1   end) as "Вид=2",
sum(case when "Вид работ"= 1  then  case "Работник"= 1   then  1  end  end) as "Вид=1 и Раб.=1"
from table
А-га, именно к такому варианту я и хотел привести автора вопроса.
Вот только может оказаться, что видов работ гораздо больше, чем 3 и все их нужно будет собрать в одну строку...
...
Рейтинг: 0 / 0
Подскажите как составить запрос
    #33897067
domanix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Каков вопрос- таков ответ :-)
...
Рейтинг: 0 / 0
Подскажите как составить запрос
    #33897141
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимор Конев domanixЯ не спрашиваю зачем это надо - просто отвечаю на вопрос.
Пробуй так - в этом случае ты получишь результат за один проход по таблице...
Код: plaintext
1.
2.
3.
4.
5.
6.
Select 
sum(*) as "Всего",
sum(case when "Вид работ"= 1  then  1   end) as "Вид=1",
sum(case when "Вид работ"= 2  then  1   end) as "Вид=2",
sum(case when "Вид работ"= 1  then  case "Работник"= 1   then  1  end  end) as "Вид=1 и Раб.=1"
from table
А-га, именно к такому варианту я и хотел привести автора вопроса.
Вот только может оказаться, что видов работ гораздо больше, чем 3 и все их нужно будет собрать в одну строку...

Вот для таких вот запросов у себя я написал ряд аггрегирующих функций общим названием Sum_Array(). Смысл в том, что функция по Group BY формирует ARRAY из исходного поля. Тогда запрос выглядит так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT
   Sum_Array("Вид работ"),
   Sum_Array("Количество")
   FROM (
      SELECT
         "Вид работ",
         Count(*) AS "Количество"
         FROM Table
         GROUP BY  1 
      ) CurSubSel

Получаем на выходе 2 массива. Правда вопрос, как возвращается массив на клиента.
...
Рейтинг: 0 / 0
Подскажите как составить запрос
    #33899986
-Zed-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо за подсказку

Именно то что нужно.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Подскажите как составить запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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