Здравствуйте.
Неодходима получить агрегатную функцию от другой агркгатной функции, как лучше сделать?
Т.е. для примера таблица товаров:
Наименование
Кол-во
Надо найти какого наименования продано больше.
В результате запроса должна вернуться запись (или несколько с одинакой суммой по кол-ву) для определенного наименования.
Т.е. надо получить MAX(SUM(кол-во)) GROUP BY наименование.
Как реализовать такой запрос на SQL?
Заранее благодарен.
slz>Неодходима получить агрегатную функцию от другой агркгатной функции, как лучше сделать?
slz>Т.е. для примера таблица товаров:
slz>Наименование
slz>Кол-во
slz>Надо найти какого наименования продано больше.
slz>В результате запроса должна вернуться запись (или несколько с одинакой суммой по кол-ву) для определенного наименования.
slz>Т.е. надо получить MAX(SUM(кол-во)) GROUP BY наименование.
slz>Как реализовать такой запрос на SQL?
Интересная задачка, кстати.
select t1.i, sum(t1.i1)
from t1
group by t1.i
having sum(t1.i1) >= all (select sum(t2.i1)
from t1 as t2
group by t2.i
)
что-то вроде этого
Здравствуйте, Romkin, Вы писали:
slz>>Неодходима получить агрегатную функцию от другой агркгатной функции, как лучше сделать?
slz>>Т.е. для примера таблица товаров:
slz>>Наименование
slz>>Кол-во
slz>>Надо найти какого наименования продано больше.
slz>>В результате запроса должна вернуться запись (или несколько с одинакой суммой по кол-ву) для определенного наименования.
slz>>Т.е. надо получить MAX(SUM(кол-во)) GROUP BY наименование.
slz>>Как реализовать такой запрос на SQL?
R>Интересная задачка, кстати.
R> select t1.i, sum(t1.i1)
R>from t1
R>group by t1.i
R>having sum(t1.i1) >= all (select sum(t2.i1)
R> from t1 as t2
R> group by t2.i
R> )
R>
R>что-то вроде этого
А в VisualFoxPro это проканает?
Я почему-то подзапрос в оператор HAVING вставить не могу. Ругается.
slz>>>В результате запроса должна вернуться запись (или несколько с одинакой суммой по кол-ву) для определенного наименования.
slz>>>Т.е. надо получить MAX(SUM(кол-во)) GROUP BY наименование.
slz>>>Как реализовать такой запрос на SQL?
R>>Интересная задачка, кстати.
R>> select t1.i, sum(t1.i1)
R>>from t1
R>>group by t1.i
R>>having sum(t1.i1) >= all (select sum(t2.i1)
R>> from t1 as t2
R>> group by t2.i
R>> )
R>>
R>>что-то вроде этого
slz>А в VisualFoxPro это проканает?
slz>Я почему-то подзапрос в оператор HAVING вставить не могу. Ругается.
Ты просил на SQL — написано в полном соответствии со стандартом. Насчет VFP ничего не скажу, просто не знаю...
Может, подойдет в стиле MSSQL?
select top 1 t1.i, sum(t1.i1)
from t1
group by t1.i
order by sum(t1.i1) desc
и у top есть with ties?
Здравствуйте, slz, Вы писали:
slz>Неодходима получить агрегатную функцию от другой агркгатной функции, как лучше сделать?
Поизвращаться немножко
slz>Т.е. для примера таблица товаров:
slz>Наименование
slz>Кол-во
GOOD_MOVE (GOOD_ID integer, QNT float, DTMOVE date) — опишем структуру товародвижения: код номенклатуры, кол-во (["+" приход]/["-" расход] ), дата проводки.
slz>Надо найти какого наименования продано больше.SELECT GM.GOOD_ID, GM.SUM_QNT
FROM (
SELECT GM.GOOD_ID, SUM(GM.QNT) AS SUM_QNT
FROM GOOD_MOVE GM
WHERE GM.DTMOVE>='01.09.2001' AND GM.DTMOVE<'03.09.2001'
AND GM.QNT<0
GROUP BY GM.GOOD_ID
) GM /* вернет список отгрузок по номенклатуре */, (
SELECT MIN(R.QNT) MIN_QNT FROM (
SELECT GM.GOOD_ID, SUM(GM.QNT) AS QNT
FROM GOOD_MOVE GM
WHERE GM.DTMOVE>='01.09.2001' AND GM.DTMOVE<'03.09.2001'
AND GM.QNT<0
GROUP BY GM.GOOD_ID
) R /* ищем максимум отгрузок */
) M /* возвращает максимум отгрузок для сравнения */
WHERE GM.SUM_QNT<=M.MIN_QNT
slz>В результате запроса должна вернуться запись (или несколько с одинакой суммой по кол-ву) для определенного наименования.
Вернется одна или несколько записей, которые достигли максимума отгрузок.
slz>Т.е. надо получить MAX(SUM(кол-во)) GROUP BY наименование.
slz>Как реализовать такой запрос на SQL?
Ну вот таким сложным внутренним соединением (inner join)
slz>Заранее благодарен.
Оценочками, я надеюсь.
Никогда не бойся браться делать то, что делать не умеешь. Помни, ковчег был построен любителем. Профессионалы построили Титаник...
Здравствуйте, Romkin, Вы писали:
slz>>>>В результате запроса должна вернуться запись (или несколько с одинакой суммой по кол-ву) для определенного наименования.
slz>>>>Т.е. надо получить MAX(SUM(кол-во)) GROUP BY наименование.
slz>>>>Как реализовать такой запрос на SQL?
R>>>Интересная задачка, кстати.
R>>> select t1.i, sum(t1.i1)
R>>>from t1
R>>>group by t1.i
R>>>having sum(t1.i1) >= all (select sum(t2.i1)
R>>> from t1 as t2
R>>> group by t2.i
R>>> )
R>>>
R>>>что-то вроде этого
slz>>А в VisualFoxPro это проканает?
slz>>Я почему-то подзапрос в оператор HAVING вставить не могу. Ругается.
R>Ты просил на SQL — написано в полном соответствии со стандартом. Насчет VFP ничего не скажу, просто не знаю...
R>Может, подойдет в стиле MSSQL?
R>R>select top 1 t1.i, sum(t1.i1)
Спасибо.
R> from t1
R> group by t1.i
R> order by sum(t1.i1) desc
R>
R>и у top есть with ties?