У меня есть запрос, который дает мне сумму и количество по категориям. Отсортировано по убыванию. Первое значение - это максимальное значение, поэтому наибольшая сумма и наибольшее количество.
SELECT SUM(score) AS calcsum, category
INTO newdataset
FROM table1 INNER JOIN
table2
ON table1.keys =table2.ID
WHERE table2.filter = "Value"
GROUP BY category
ORDER BY SUM(score) DESC;
соответственно
SELECT count(*) as counted, category
INTO newdataset
FROM table1 INNER JOIN
table2
ON table1.keys =table2.ID
WHERE table2.filter = "Value"
GROUP BY category
ORDER BY count(*) DESC;
Однако теперь я не хочу список, я просто хочу максимальное значение. Я хочу реализовать это сначала с максимальным количеством и максимальным количеством. И второй способ - просто извлечь первое наблюдение из списка.
Первый метод, который я попробовал:
SELECT category, MAX(calcsum)
FROM (
SELECT SUM(score) AS calcsum, category
INTO newdataset
FROM table1 INNER JOIN
table2
ON table1.keys =table2.ID
WHERE table2.filter = "Value"
GROUP BY category
ORDER BY SUM(score) DESC);
соответственно
SELECT category, MAX(counted)
FROM (
SELECT count(*) AS counted, category
INTO newdataset
FROM table1 INNER JOIN
table2
ON table1.keys =table2.ID
WHERE table2.filter = "Value"
GROUP BY category
ORDER BY count(*) DESC);
, что приводит к ошибке сообщение «Запрос действия не может быть использован в качестве источника строки».
Второй способ, который я пробовал:
SELECT TOP 1 *
FROM (
SELECT SUM(score) AS calcsum, category
INTO newdataset
FROM table1 INNER JOIN
table2
ON table1.keys =table2.ID
WHERE table2.filter = "Value"
GROUP BY category
ORDER BY SUM(score) DESC);
соответственно.
SELECT TOP 1 *
FROM (
SELECT SUM(score) AS calcsum, category
INTO newdataset
FROM table1 INNER JOIN
table2
ON table1.keys =table2.ID
WHERE table2.filter = "Value"
GROUP BY category
ORDER BY SUM(score) DESC);
Та же ошибка здесь. В чем здесь проблема, почему она не работает и я не понимаю сообщение об ошибке? Я хотел бы иметь рабочий раствор ios для обоих способов, как бы выглядело рабочее решение?
Обновление : я пробовал согласно ответам:
SELECT category, max(calcsum)
INTO newdataset
FROM (SELECT SUM(score) AS calcsum, category
FROM table1 INNER JOIN
table2
ON table1.keys = table2.ID
WHERE table2.filter = "Value"
GROUP BY category
) t;
Тем не менее, я получаю сообщение об ошибке (категория не является частью агрегатной функции, переведено)?
Я также пытался:
SELECT t.category, max(calcsum)
INTO newdataset
FROM (SELECT SUM(score) AS calcsum, category
FROM table1 INNER JOIN
table2
ON table1.keys = table2.ID
WHERE table2.filter = "Value"
GROUP BY category
) t;
Но та же ошибка. Итак, как будет выглядеть рабочее решение, использующее max, а не top?
Когда я пытаюсь это сделать:
SELECT category, calcsum
INTO newdataset
FROM (SELECT SUM(score) AS calcsum, category
FROM table1 INNER JOIN
table2
ON table1.keys = table2.ID
WHERE table2.filter = "Value"
GROUP BY category
) t;
Это работает, но когда я добавляю max (calcsum), я получаю ошибка (категория не является частью агрегатной функции, переводится)?