|
|
|
Как правильно сформировать SQL запрос
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Неодходимо получить агрегатную функцию от другой агрегатной функции, как лучше сделать? Т.е. для примера таблица товаров: Наименование Кол-во Надо найти какого наименования продано больше. В результате запроса должна вернуться запись (или несколько с одинакой суммой по кол-ву) для определенного наименования. Т.е. надо получить MAX(SUM(кол-во)) GROUP BY наименование. Как реализовать такой запрос в VFP? Заранее благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 13:35 |
|
||
|
Как правильно сформировать SQL запрос
|
|||
|---|---|---|---|
|
#18+
Примерно так: SELECT Наименование, SUM(Кол_во) AS Кол_во ; FROM ТаблицаТоваров ; GROUP BY Наименование ORDER BY Кол_во DESC ; WHERE Кол_во # (0) INTO CURSOR ИмяКурсора ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 14:03 |
|
||
|
Как правильно сформировать SQL запрос
|
|||
|---|---|---|---|
|
#18+
Так Вы получите таблицу, а не одну запись или несколько с одинаковыми суммами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 14:07 |
|
||
|
Как правильно сформировать SQL запрос
|
|||
|---|---|---|---|
|
#18+
Тогда, если я правильно понял, к указанному выше запросу добавляем еще один SELECT MAX(Кол_во) AS МахКол_во FROM ИмяКурсора Этот запрос вернет строку с наибольшим кол-вом. При попытке написать в запросе MAX(SUM(Кол_во)) фокс ругнулся на отсутствие ф-ции SUM. Можно, наверное как-то это сделать одним запросом, но проще, по-моему, двумя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 14:50 |
|
||
|
Как правильно сформировать SQL запрос
|
|||
|---|---|---|---|
|
#18+
Если нужна именно одна запись, то достачно использовать TOP 1 SELECT TOP 1 ; Наименование, SUM(Кол_во) AS Кол_во ; FROM ТаблицаТоваров ; GROUP BY Наименование ; ORDER BY Кол_во DESC Если же именно список товаров у которых сумма равна максимальному количеству, то насколько я знаю, в FoxPro одним запросом не обойдешся. Впрочем, даже если удасться выкрутится и составить навороченный запрос с подзапросами, скорость выполнения такого запроса в FoxPro будет намного ниже скорости выполнения нескольких последовательных запросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 14:54 |
|
||
|
Как правильно сформировать SQL запрос
|
|||
|---|---|---|---|
|
#18+
А подзапрос, в VFP, можно в операторе HAVING написать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 14:57 |
|
||
|
Как правильно сформировать SQL запрос
|
|||
|---|---|---|---|
|
#18+
А вы поробуйте, а потом расскажите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 15:11 |
|
||
|
Как правильно сформировать SQL запрос
|
|||
|---|---|---|---|
|
#18+
Попробовал. В WHERE работат, нет проблем, а в HAVING работает только с фиксированным параметром, а на подзапрос матерится. Конечно может, что не так пишу. Вот и хотел узнать у народа, а могет ли VFP вобще это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 15:44 |
|
||
|
Как правильно сформировать SQL запрос
|
|||
|---|---|---|---|
|
#18+
Насколько я в курсе, подзапросы в FoxPro можно ставить только в директиву WHERE, да и то, в строго определенном синтаксисе типа IN, ANY, SOME. В директиве HAVING допустимы только собственно аггрегатные функции и константы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 17:02 |
|
||
|
|

start [/forum/topic.php?fid=41&fpage=416&tid=1598004]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
| others: | 237ms |
| total: | 374ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...