Ошибка использования Max и Min на основе Avg для определения самой низкой средней стоимости и самой высокой средней стоимости (MySQL) - PullRequest
0 голосов
/ 05 декабря 2018

Я определил среднюю стоимость предмета следующим образом:

FROM BOOK
JOIN
(SELECT BOOK_SUBJECT,
Avg(BOOK_COST) AS AVGCOST
FROM BOOK
GROUP BY BOOK_SUBJECT) AS SUB USING (BOOK_SUBJECT)
ORDER BY BOOK_TITLE;

Однако теперь мне нужно отобразить самую низкую среднюю стоимость книг по предмету и самую высокую среднюю стоимость книг по предмету,Я знаю, что мне нужно использовать MIN и MAX, но я не уверен в синтаксисе теперь, когда я должен основывать его на AVG.

Вот моя попытка ......

SELECT BOOK_SUBJECT
FROM BOOK
WHERE BOOK_COST =
(SELECT MIN(AVGCOST)
FROM BOOK)
ORDER BY BOOK_SUBJECT;

SELECT BOOK_SUBJECT
FROM BOOK
WHERE BOOK_COST =
(SELECT MAX(AVGCOST)
FROM BOOK)
ORDER BY BOOK_SUBJECT;

Это создает ошибку SQL: неизвестный столбец «AVGCOST» в списке полей.Как мне обойти это?Я понимаю, что он ищет атрибут и не может его найти, так что нужно добавить в код, чтобы MySQL вычислял минимальное и максимальное значения avg?Большое спасибо тем, кто откликнулся, ваши отзывы были потрясающими.

1 Ответ

0 голосов
/ 05 декабря 2018

Я думаю, что вы пытаетесь достичь

SELECT *
FROM BOOK
JOIN
(
   SELECT BOOK_SUBJECT,
   AVG(BOOK_COST) AS AVGCOST,
   MIN(BOOK_COST) AS MINCOST,
   MAX(BOOK_COST) AS MAXCOST
   FROM BOOK
   GROUP BY BOOK_SUBJECT
) AS SUB USING (BOOK_SUBJECT)
ORDER BY BOOK_TITLE;

Основано на

BOOK_SUBJECT BOOK_TITLE BOOK_COST
------------ ---------- ---------------------
MATHS        Book 1     15.99
MATHS        Book 2     14.99
MATHS        Book 3     13.99
ENGLISH      Book A     10.99
ENGLISH      Book B     9.99

Возвращает

BOOK_SUBJECT BOOK_TITLE BOOK_COST AVGCOST MINCOST MAXCOST
------------ ---------- --------- ------- ------- -------
MATHS        Book 1     15.99     14.99   13.99   15.99
MATHS        Book 2     14.99     14.99   13.99   15.99
MATHS        Book 3     13.99     14.99   13.99   15.99
ENGLISH      Book A     10.99     10.49   9.99    10.99
ENGLISH      Book B     9.99      10.49   9.99    10.99

Потянуть только МИН / МАКСсредние затраты (округлены до 2 десятичных знаков)

SELECT 
  ROUND(MIN(MM.AVGCOST), 2) AS MINAVG, 
  ROUND(MAX(MM.AVGCOST), 2) AS MAXAVG
FROM
(
   SELECT BOOK_SUBJECT, 
   AVG(BOOK_COST) AS AVGCOST
   FROM BOOK
   GROUP BY BOOK_SUBJECT
) MM

Вернет

MINAVG    MAXAVG
------    ------
10.49     14.99
...