powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SQL: GROUP BY clause is missing or invalid. ???
21 сообщений из 21, страница 1 из 1
SQL: GROUP BY clause is missing or invalid. ???
    #32257408
ziggy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем здрасссьте!

Никак не уразумею, в каких случаях выдается такая ошибка? Разумеется clause у меня присутствует и в таблице существует, но ошибку выдает все равно, по какому бы полю я не группировал.

А также эту ошибку выдает там, где функции GROUP BY НЕТ ВООБЩЕ!!!

Вот 2 примера, и в том и в другом случае выдается вышеуказанная ошибка! Help!

SELECT nakl.shortname, debt.time,debt.category, SUM(nakl.summa);
FROM nakl LEFT OUTER JOIN debt ;
ON nakl.shortname = debt.shortname;
INTO TABLE debt_all.dbf

SELECT nakl.shortname, debt.time,debt.category, SUM(nakl.summa);
FROM nakl LEFT OUTER JOIN debt ;
ON nakl.shortname = debt.shortname;
Group BY nakl.shortname;
INTO TABLE debt_all.dbf
...
Рейтинг: 0 / 0
SQL: GROUP BY clause is missing or invalid. ???
    #32257489
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Присутствие агрегатной функции SUM по nakl.summa признается фоксом ошибкой, поскольку все остальные поля не являются агрегатами и как следствие они не могут учавствовать в вычислениях. Если код изменить следующим образом, то ошибка исчезнет:

Код: plaintext
1.
2.
3.
4.
SELECT nakl.shortname, debt.time,debt.category, SUM(nakl.summa); 
FROM nakl LEFT OUTER JOIN debt ; 
ON nakl.shortname = debt.shortname; 
GROUP BY nakl.shortname, debt.time, debt.category;
INTO TABLE debt_all.dbf 


Во втором примере проблема другого рода - если присутствует предложение group by, то выражения предложения select, не вошедшие в список group by, могут быть только агрегатами (до VFP8, такое разрешалось, а восьмерке это поведение регулируется, только вот сейчас не вспомню чем:(). Значит:

Код: plaintext
1.
2.
3.
4.
SELECT nakl.shortname, debt.time,debt.category, SUM(nakl.summa); 
FROM nakl LEFT OUTER JOIN debt ; 
ON nakl.shortname = debt.shortname; 
Group BY nakl.shortname, debt.time,debt.category; 
INTO TABLE debt_all.dbf


Удачи.
...
Рейтинг: 0 / 0
SQL: GROUP BY clause is missing or invalid. ???
    #32257494
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SET ENGINEBEHAVIOR 70
...
Рейтинг: 0 / 0
SQL: GROUP BY clause is missing or invalid. ???
    #32257497
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, Володь, за подсказку - ты как всегда вовремя.
...
Рейтинг: 0 / 0
SQL: GROUP BY clause is missing or invalid. ???
    #32257611
ziggy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое, Анатолий!

Действительно все успешно разрешилось. Причина была именно в "Восьмерке", т.к. до этого все успешно работало на более старых версиях. Спасибо!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
SQL: GROUP BY clause is missing or invalid. ???
    #36625395
bogomolova_valya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Прошу прощение за вторжение в тему, но это единственное что найдено в русскоязычном интернете по интересующей теме. У меня близкая проблема к авторской. Но не совсем. Пишу оболочку для базы в фоксе под С++Builder. Использую драйвер oledb. Имеется вот такой запросик:
Код: plaintext
select tab_num, sum(cena*kol)-dano as sum1 from fullbuy group by data_t
Вы дают такую же ошибку как и у автора: sql: group by clause is missing or invalid . При этом в фоксовской оболочке данный запрос выполняется без проблем. Разница получается в используемом драйвере. То есть из разряда - разные версии. Как изменить запрос чтобы заработал под указанным драйвером???
...
Рейтинг: 0 / 0
SQL: GROUP BY clause is missing or invalid. ???
    #36625453
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bogomolova_valyaДобрый день!
Прошу прощение за вторжение в тему, но это единственное что найдено в русскоязычном интернете по интересующей теме. У меня близкая проблема к авторской. Но не совсем. Пишу оболочку для базы в фоксе под С++Builder. Использую драйвер oledb. Имеется вот такой запросик:
Код: plaintext
select tab_num, sum(cena*kol)-dano as sum1 from fullbuy group by data_t
Вы дают такую же ошибку как и у автора: sql: group by clause is missing or invalid . При этом в фоксовской оболочке данный запрос выполняется без проблем. Разница получается в используемом драйвере. То есть из разряда - разные версии. Как изменить запрос чтобы заработал под указанным драйвером???
Это не валидное выражение с использованием GROUP BY!
VFP до версии 8 допускал такие вещи. Да и более старших версиях с SET ENGINEBEHAVIOR 70 это можно делать, но... вы для себя ответьте на вопрос: А какое значение tab_num нужно взять для одного значения data_t (поле группировки) ?. Вот и сервер не знает!
С уважением, Алексей
...
Рейтинг: 0 / 0
SQL: GROUP BY clause is missing or invalid. ???
    #36625465
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: bogomolova_valya
Код: plaintext
select tab_num, sum(cena*kol)-dano as sum1 from fullbuy group by data_t, tab_num

И что такое dano?
Если это поле таблицы, тогда нужно переписывать запрос, если это переменная, тогда нужно указывать что это параметр

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
SQL: GROUP BY clause is missing or invalid. ???
    #36626215
bogomolova_valya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторЭто не валидное выражение с использованием GROUP BY!
VFP до версии 8 допускал такие вещи. Да и более старших версиях с SET ENGINEBEHAVIOR 70 это можно делать, но... вы для себя ответьте на вопрос: А какое значение tab_num нужно взять для одного значения data_t (поле группировки) ?. Вот и сервер не знает!
Уважаемый Алексей!
Мне надо сгруппировать все по полю data_t. При этом при этой группировке вычислить выражение (то есть перемножить, просуммировать и вычесть). То есть количество полей с одинокавым tab_num может быть хоть сколько, но data_t для каждого tab_num должна стать одна.
Уважаемый Игорь Горбонос!
Так как Вы исправили запрос - он работать стал (ошибки нет). Но при этом по сравнению с моим количество результирующих записей при обработке увеличилось значительно. Значит как то не правильно вычисляет, или у вас, или у меня. Не могу понять смысловую разницу...
Про dano. Поле как поле, числовое. Что в нем не так в запросе?
...
Рейтинг: 0 / 0
SQL: GROUP BY clause is missing or invalid. ???
    #36626250
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: bogomolova_valya
> Не могу понять смысловую разницу...

Я с фокспро года 4 всего, но никогда не оставлял Group By на откуп самому фокспро. Всегда писал так как положено в
том-же MSSQL или FireBird

> Про dano. Поле как поле, числовое. Что в нем не так в запросе?

Если это тоже поле этой-же таблицы, тогда его нужно тоже под Group By.

Хотя тогда я не понимаю смысла этого запроса. Можно написать своими словами что нужно получить?

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
SQL: GROUP BY clause is missing or invalid. ???
    #36626265
bogomolova_valya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь!!!!!!!! Дошло!!!! Вы правы. Получалось так, что в моем запросе группировалось все по дате и в случае совпадения даты для разных tab_num оставалась только первая запись, остальные затирались (терялись короче). А в Вашем варианте учитывается что и tab_num может не совпадать. Спасибо Вам огромное! Все работает. С Вашей поправкой. :)
...
Рейтинг: 0 / 0
SQL: GROUP BY clause is missing or invalid. ???
    #36626266
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Игорь Горбонос

И каков смысл полей в запросе?
cena*kol - это понятно, цена умноженная на количество чего-то.
tab_num - предполагаю, что табельный номер(ну или какой-то идентификатор этого самого чего-то)
data_t - некая опорная дата для расчетов
с этими вроде понятно, но dano как-то никуда не вписывается

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
SQL: GROUP BY clause is missing or invalid. ???
    #36626277
bogomolova_valya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как говориться, неиповедима мысль разработчика, куда его занесет (я к этому руку не прикладывала, сама гадала, что ЕТО)... Dano - это сумма наличности!... Типа "дано рублей".
...
Рейтинг: 0 / 0
SQL: GROUP BY clause is missing or invalid. ???
    #36626326
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: bogomolova_valya
> Как говориться, неиповедима мысль разработчика, куда его занесет (я к этому руку не прикладывала, сама гадала,
> что ЕТО)... Dano - это сумма наличности!... Типа "дано рублей".

Тогда получается, что твой запрос пытается считать для каждого tab_num сумму произведения цены на количество, но попытка
не получается, потому что отдельно стоящее dano не дает "свернуть" несколько произведений в одно число, если оно разное
для разных произведений. Это dano или нужно "протолкнуть" в sum:
sum(cena*kol-dano) или обрабатывать несколько по другому, например так:(на примере MSSQL)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SELECT f1.tab_num,
       f2.X_ego_Z_chto_eto - f1.dano AS sum1
FROM   (
           SELECT data_t,
                  tab_num,
                  SUM(dano) AS dano
           FROM   fullbuy
           GROUP BY
                  data_t,
                  tab_num
       ) f1
       INNER JOIN (
                SELECT data_t,
                       tab_num,
                       SUM(cena * kol) AS X_ego_Z_chto_eto
                FROM   fullbuy
                GROUP BY
                       data_t,
                       tab_num
            ) f2
            ON  f1.tab_num = f2.tab_num AND f1.data_t = f2.data_t
Первым подзапросом получаем dano просуммированное
по дням и табельным номерам, вторым подзапросом получаем сумму произведений, так-же разбитую по дням и табельным
номерам. Джоиним их по дням и табельным номерам и получаем разницу между просуммироваными цена_на_количество и
деньги_на_руки. Хотя я могу быть не прав. Но мне не хватает именно смысловой нагрузки этого запроса

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
SQL: GROUP BY clause is missing or invalid. ???
    #37509698
p672
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хочу перейти с 7 на 9 foxpro, но не могу из-за вышеуказанной проблемы c GROUP BY с подсуммировочными запросами.
а очень хочется перейти на 9 версию потому что в ней есть другие новые нужные мне возможности, мечтаю просто!
как правильно писать в девятой версии FOXPRO подсуммировочные запросы? если сложить нужно не по всем полям, а в GROUP BY нужно выбрать только те поля по которым группирование и сложение производится.

пожалуйста дайте пример такого запроса в visual foxpro 9 как это делается?!
...
Рейтинг: 0 / 0
SQL: GROUP BY clause is missing or invalid. ???
    #37509711
p672
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМSET ENGINEBEHAVIOR 70 - неужели в 9 версии это единственный верный способ и прийдётся только так теперь выкручиваться?

а только средствами запроса select разве теперь никак нельзя сделать подсуммировочный запрос с GROUP BY если не по всем полям(признакам) нужно сложить.
...
Рейтинг: 0 / 0
SQL: GROUP BY clause is missing or invalid. ???
    #37509788
_Злой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для тех, кто хелп читать не умеет, да, единственный.
...
Рейтинг: 0 / 0
SQL: GROUP BY clause is missing or invalid. ???
    #37509895
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В 9ке синтаксис запросов привели к стандарту SQL. Ничего страшного в этом нет.
Как писать? добавь недостающие поля в GROUP BY или лучше делай в два запроса: первый группировка, второй добавление связанных полей.

ЗЫ Лучше привыкать писать по стандарту, в SQL-серверах нет SET ENGINEBEHAVIOR 70
...
Рейтинг: 0 / 0
SQL: GROUP BY clause is missing or invalid. ???
    #37510092
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я всегда переходил дорогу не обращая внимания на цвет сфетофора. А теперь ввели бешенные штрафы. Неужели придется переходить дорогу только на зеленый цвет?!

Использование старого синтаксиса содержала не однозначность результата.

Код: plaintext
1.
2.
3.
4.
5.
6.
Create cursor test (f1 i, f2 i)

insert into test values ( 1 , 1 )
insert into test values ( 1 , 2 )
insert into test values ( 1 , 3 )

select f1, f2 from test group by f1

Какое значение должно иметь поле f2 в результирующей выборке? Неважно, что именно Вы получите, а должно-то было быть что? Максимальное, минимальное? Что? Этого никто не знает, кроме разработчика.

В старых версиях FoxPro в этом случае брали первое попавшееся значение, а в новых версиях - это интерпретируется как ошибка. И правильно! Ну, откуда генератору запросов знать, что именно Вы хотели получить! Он не знает. О чем честно Вам и сообщает. Дескать, уточните, что именно Вы хотите получить?

Вариантов, в общем-то, два

1. Программист просто забыл указать группировку и по второму полю

Код: plaintext
select f1, f2 from test group by f1, f2

2. Не важно, какое значение второго поля будет в выборке. В этом случае используются аггрегирующие функции max()/min()

Код: plaintext
select f1, max(f2) as f2 from test group by f1

Ну, есть еще один специфический вариант, когда полей вне группировки много и надо взять любые значения, но из одной записи. Это решается специфическими запросами или пересмотром идеологии работы, чтобы таких "идиотских" требований не возникало. Поскольку при тщательном анализе выясняется, что требование действительно "идиотское". Пользователи сами не знают, что им нужно. Не имеют навыков анализа данных и хотя видеть "всего и много". Для подобных задач менять глобальные настройки - бессмысленно. Поскольку в этом случае разных "хотелок" очень много и по любому требуется сложное программирование, чтобы учесть их все.
...
Рейтинг: 0 / 0
SQL: GROUP BY clause is missing or invalid. ???
    #37823601
labirint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, профессионалы.

Вот запрос (Фокс 8):

SELECT f.fundname, sum(m.fmsum) as bls FROM деньги_фондов m INNER JOIN справочник_фондов f ON f.fundid = m.fundid group by f.fundname order by m.fmdate INTO cursor vw

Вроде бы все правильно?
Выдает ту же ошибку - про Group By clause...
Прошу указать на мои ошибки.
...
Рейтинг: 0 / 0
SQL: GROUP BY clause is missing or invalid. ???
    #37823606
labirint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
labirint,
... однако,
убрал "ордер бай" и запрос работает :о((, а я с ним боролся часа 3.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SQL: GROUP BY clause is missing or invalid. ???
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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