SQL вычитать мин и макс
Я просто пытаюсь использовать функции min() и max() в выражении, например так:
SELECT WSN, MIN(TOP) - MAX(BASE) FROM PERFS GROUP BY WSN
Но это не похоже на допустимый SQL. Мне постоянно говорят, что я не могу использовать агрегатные функции в выражении. Могу ли я получить помощь?
4 ответа
Я бросил вопрос на форум DBISAM в Elevate (не уверен, почему я не сделал этого с самого начала), и вот что они придумали:
Используйте два прохода и создайте таблицу памяти.
SELECT WSN, MAX(BASE) as MaxBase, MIN(TOP) as MinTop INTO memory FirstPass FROM PERFS GROUP BY WSN
;
SELECT (MaxBase - MinTop) as Calc FROM memory FirstPass
Спасибо за помощь, ребята.
Без платформы базы данных мы не можем сказать так много, но попробуйте это:
select wsn, top - base
from
( SELECT WSN
, MIN(TOP) top
, MAX(BASE) base
FROM PERFS
GROUP
BY WSN
)
Я думаю, что фактический ответ можно найти в документации, где вы можете найти, что TOP
это ключевое слово, и таблицы экранированы "
,
Попробуй это:
SELECT WSN
, MIN("TOP") - MAX(BASE)
FROM PERFS
GROUP
BY WSN
Лучший ответ может зависеть от того, какой тип SQL вы используете, так как обычное табличное выражение очень пригодится для этого. Я предполагаю, что TOP и BASE являются полями в таблице PERFS?
Вот мое лучшее предположение:
SELECT WSN, (select MIN(TOP) FROM PERFS GROUP BY WSN) - (select MAX(BASE) FROM PERFS GROUP BY WSN) FROM PERFS GROUP BY WSN
Редактировать: ответ Патрика, вероятно, будет лучше.
select MAX(population) - MIN(population) as value from city;
где запрос состоит в том, чтобы найти максимальное - минимальное от населения в таблице города
значение - это имя переменной, где оно может быть изменено на любое
Это работает для меня, используя Oracle. Какую СУБД вы используете?
Приведенный ниже оператор создает образец встроенной таблицы, к которой вы можете обращаться по запросу. Я предоставил пример кода здесь, который может быть запущен как есть (самостоятельно). Вы должны адаптировать его для соответствия вашей собственной схеме базы данных:
WITH TEST_DATA AS (
SELECT 'ted' AS name, 1 as val FROM DUAL UNION ALL
SELECT 'ted' AS name, 2 as val FROM DUAL UNION ALL
SELECT 'ted' AS name, 3 as val FROM DUAL UNION ALL
SELECT 'sam' AS name, 5 as val FROM DUAL UNION ALL
SELECT 'sam' AS name, 10 as val FROM DUAL
)SELECT name, MIN(val) - MAX(val) as minmax
FROM TEST_DATA
GROUP BY name