Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/26: Рейтинг темы: голосов - 26, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 18.08.2010
Сообщений: 6

запрос с group by

18.08.2010, 13:34. Показов 4946. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток. У меня такая проблема: не работает запрос, который составляется в делфи.

Delphi
1
2
3
4
5
6
7
8
9
str:='select Id as №, Otd as Отдел, f as Фамилия, I as Имя, O as Отчество, sum(nSl) as Сл, sum(bd) as Дней, D as Диагноз from infa where (';
 if maskEdit1.Text<>'' then begin f:=true; str:=str+' Om>='+maskEdit1.Text+' and'; end;
 if maskEdit2.Text<>'' then begin f:=true; str:=str+' Om<='+maskEdit2.Text+' and '; end;
 if maskEdit3.Text<>'' then begin f:=true; str:=str+' G>='+maskEdit3.Text+' and '; end;
 if maskEdit4.Text<>'' then begin f:=true; str:=str+' G<='+maskEdit4.Text+') and ('; end;
 if (edit2.Text<>'') then str:=str+'nSl'+combobox1.Text+edit2.Text+')';
 if (edit2.Text<>'') and (edit3.Text<>'') then str:=str+' or (';
 if (edit3.Text<>'') then str:=str+'bd'+combobox2.Text+edit3.Text+')';
 str:=str+' group by Id,Otd,F,I,O,D,bd';
Так бы я написал запрос:
SQL
1
2
SELECT Id AS, Otd AS Отдел, f AS Фамилия, I AS Имя, O AS Отчество, SUM(nSl) AS Сл, SUM(bd) AS Дней, D AS Диагноз FROM infa WHERE (Om>='text' AND Om<='text' AND G>='text' AND G<='text') AND 
(SUM(nSl)>'text' OR SUM(bd)>'text') GROUP BY F
Но не проходит выражение sum() в where

Все дело в последней строке, без group by запрос не работает. С групом работает, но мне нужен другой результат.
Смысл вот в чем: Нужно что бы выводились строки без повторения (в таблице повторения могут быть) и считало сумму по полям Sl и bd и выбирал поля по значению суммы (т.е. where sum(nSL)=стокато).
Я недавно начал изучать делфи и скюэль, поэтому немогу справиться без помощи. Спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.08.2010, 13:34
Ответы с готовыми решениями:

Sql запрос с применением GROUP BY в Access+ Delphi
Мир всем и привет ! Можно ли применят GROUP BY для поле &quot;ФИО&quot; в этом коде: ADOQuery2.SQL.Add('SELECT * FROM таб1 WHERE ФИО LIKE...

Не работает запрос (group by) . error code -104 invalid column referense
Здравствуйте ! Помогите, пожалуйста! Делаю учебное задание: Делфи7 + Interbase. Однако делфи не при чём, т к эта же ошибка...

Mixing of GROUP columns (MIN(),MAX(),COUNT(),.) with no GROUP columns is illegal if there is no GROUP BY clause
Такая ошибка: КОД: $result=mysql_query(&quot;SELECT description, min(schedule.date) as date FROM schedule where...

11
 Аватар для arni
914 / 879 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
18.08.2010, 13:46
Ваш пример бесконечно далек от корректного запроса.
1) Если применяется группировка, то в group by должны быть перечислены все поля из списка select, которые не охватываются функциями группировки, либо которые не являются константами.
У вас 8 полей, из которых обрамлены SUM лишь два. Т.е. шесть шт. должно быть в group by, но там лишь одно.

2) sum(nSl)>'text' - как может сумма (число) сравниваться на больше/меньше со строковой константой? В чем сокраментальный смысл, даже если сервер умудрится сделать неявный каст числа к строке?

3) фильтрующие предикаты на группировочными полями (sum и т.д.) разрешены только в предложении having, не where !!!
0
0 / 0 / 0
Регистрация: 18.08.2010
Сообщений: 6
18.08.2010, 13:57  [ТС]
Ваш пример бесконечно далек от корректного запроса.
1) Если применяется группировка, то в group by должны быть перечислены все поля из списка select, которые не охватываются функциями группировки, либо которые не являются константами.
У вас 8 полей, из которых обрамлены SUM лишь два. Т.е. шесть шт. должно быть в group by, но там лишь одно.

2) sum(nSl)>'text' - как может сумма (число) сравниваться на больше/меньше со строковой константой? В чем сокраментальный смысл, даже если сервер умудрится сделать неявный каст числа к строке?

3) фильтрующие предикаты на группировочными полями (sum и т.д.) разрешены только в предложении having, не where !!!

Поэтому я и попросил помощи, своими мозгами пока не доходит - опыта маловато.
1. Все правильно работает только когда все кроме сум() прописаны в гроуп, но я не понял как сделать список без повторений.
2. Выше кусок кода вставлен, там видно что все в порядке, просто выразился не корректно)
3.Нука щас с having попробую
0
 Аватар для arni
914 / 879 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
18.08.2010, 14:01
Цитата Сообщение от LordDeArt Посмотреть сообщение
Поэтому я и попросил помощи, своими мозгами пока не доходит - опыта маловато.
Это объясняет пп.1 и 3, но не п.2 Что за сравнение числового аггрегата со строкой?
0
0 / 0 / 0
Регистрация: 18.08.2010
Сообщений: 6
18.08.2010, 14:17  [ТС]
А все понял, даж не заметил что со строкой) А кстати ниче нормально работает, но для приличия переведу.

Итак с хэвингом условие пошло:

SQL
1
SELECT DISTINCT Otd AS Отдел, f AS Фамилия, I AS Имя, O AS Отчество, SUM(nSl) AS Сл, SUM(bd) AS Дней, D AS Диагноз FROM infa GROUP BY Otd,F,I,O,D,bd HAVING (SUM(nSl)>0 OR SUM(bd)>100)
Но, строки все равно повторяются и я никак не могу добиться их суммы.

Чего я хочу например:
ФИО || профессия || корочки || часов отработал || заход (1 если засчитали, 0 если нет)

Иванов || Слесарь || 7разряд || 3 || 1
Иванов || Слесарь || 7разряд || 2 || 0
Иванов || Слесарь || 7разряд || 1 || 1
Иванов || Слесарь || 7разряд || 4 || 1
Сидоров || Слесарь || 7разряд || 5 || 1

И должна получиться строка
ФИО || профессия || корки || всего часов || засчитанных смен

Иванов || Слесарь || 7разряд || 10 || 3
Сидоров || Слесарь || 7разряд || 5 || 1
и т. д.
0
 Аватар для arni
914 / 879 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
18.08.2010, 14:38
так попробуй:
SQL
1
2
3
4
5
SELECT Otd AS Отдел, f AS Фамилия, I AS Имя, O AS Отчество, D AS Диагноз, 
       SUM(nSl) AS Сл, SUM(bd) AS Дней 
  FROM infa 
 GROUP BY 1, 2, 3, 4, 5 
HAVING SUM(nSl)>0 OR SUM(bd)>100
0
0 / 0 / 0
Регистрация: 18.08.2010
Сообщений: 6
19.08.2010, 06:40  [ТС]
Спасибо помогло, учиться, учиться и еще раз учиться)
0
0 / 0 / 0
Регистрация: 18.08.2010
Сообщений: 6
06.09.2010, 13:16  [ТС]
Возник следующий вопрос:
Можно ли написать запрос так, что бы выводилась главная строка и еще подстрока. Т.е.:

Code
1
2
3
4
5
6
Иванов \ Максим \ Слесарь\ 2 разряд \ 1990-2001
                 \Слесарь\ 1 разряд \ 2001-2003
                 \ Техник  \ младший \ 2003-2007
Сидоров \ Иван \ Слесарь\ 3 разряд \ 1990-2001
                 \Слесарь\ 2 разряд \ 2001-2003
                 \ Техник  \ старший \ 2003-2007
Или есть какие-либо другие способы это осуществить? Нужно создать такой список, а при объединении записей с разными значениями, несовпадающие поля создают новую запись, что приводит к некорректной сумме (см.выше)
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
06.09.2010, 13:20
LordDeArt, запрос вряд ли, но вы же можете сами управлять отображением, но в стринггриде, хотя может уже и кто-то смастерил такой дбгрид...
0
 Аватар для arni
914 / 879 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
06.09.2010, 13:29
LordDeArt, в генераторе отчетов такое сделать не сложно - просто указать подавление повторяющихся значений с объединением ячеек.
Если нужно отобразить в гриде, то такой запрос лучше фетчить из хранимой процедуры: там вывод по указанной схеме гораздо проще организовать, чем на чистом SQL.
0
0 / 0 / 0
Регистрация: 18.08.2010
Сообщений: 6
07.09.2010, 08:11  [ТС]
arni, расскажите, пожалуйста где его найти этот генератор отчетов.
P.S. Спасибо за ответы
0
 Аватар для arni
914 / 879 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
07.09.2010, 08:51
LordDeArt, в стандартной поставке дельфы. Конкретный продукт зависит от версии этой самой дельфы (QuickReport, Rave). Кроме того, бесплатных и платных сторонних продуктов - как грибов после дождя. Вашим потребностям удовлетворит, думаю, любой.
В наших пенатах особенно популярен FastReport. Правда он платный, но это врятли будет для вас проблемой
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.09.2010, 08:51
Помогаю со студенческими работами здесь

Запрос Group BY
Здравствуйте . Ковырялся ковырялся, но так и застрял на запросе. Имеется таблица вида TABLE_1 DT(datetime) ...

Запрос Group BY
Здравствуйте! Не получается создать запрос следующего вида: SELECT POSTAVHIKI.adress, TOVARI.ves_edinice_tovara,...

Запрос с GROUP BY
есть столбец id со значениями: 1 1 2 2 3 4 5 моя задача посчитать количество уникальных значений, тобишь всего значений 7, а кол-во...

Запрос к бд. Условия в GROUP BY
Добрый вечер. Подскажите как можно прописать условие группировки Есть запрос: SELECT t.id_test AS test_id,t.name AS test_name,...

Откорректировать запрос с GROUP BY
SELECT username, score, game_time FROM game JOIN player ON game.user_id = player.user_id GROUP BY username DESC LIMIT 5 Это запрос должен...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru