Как найти среднюю цену для сгруппированного диапазона, когда моя цена находится в другой таблице с Apex Oracle SQL? - PullRequest
0 голосов
/ 05 декабря 2018

Рисунок таблицы SCORE_T Я пытаюсь найти способ кодировать мою среднюю цену в диапазоны, которые я установил из отдельной таблицы.Итак, мои точки, которые я использовал для формирования диапазона, взяты из моей таблицы POINTS_T, и я использовал количество вхождений, чтобы установить один столбец с помощью COUNT (*).Сейчас я пытаюсь найти среднюю цену за диапазон, но моя цена указана в таблице WINE, и у меня возникли проблемы, поскольку я использую подзапрос и не знаю, где его включить.Я приложил две картинки, одна из которых - мой исходный код без ошибок (поскольку я не пытался указать среднюю цену), а вторая - моя попытка включить его в подзапрос.

Вотмой код, который у меня есть (это не включает мою попытку по средней цене).

SELECT t.range as "Score Range", COUNT(*) as "Number of Occurrences" 
FROM (
  SELECT Case  
    when SCORE_T.Points between 95 and 100 then '95-100'
    when SCORE_T.Points between 90 and 94 then '90-94'
    when SCORE_T.Points between 85 and 89 then '85-89'
    when SCORE_T.Points between 80 and 84 then '80-84'
    end as RANGE
  FROM SCORE_T) t
GROUP BY t.range
ORDER BY COUNT(*) DESC
;

И вот что я имею с моей попыткой, которая выдает ошибку.

SELECT t.range as "Score Range", COUNT(*) as "Number of Occurrences"
FROM (
  SELECT Case  
    when SCORE_T.Points between 95 and 100 then '95-100'
    when SCORE_T.Points between 90 and 94 then '90-94'
    when SCORE_T.Points between 85 and 89 then '85-89'
    when SCORE_T.Points between 80 and 84 then '80-84'
    end as RANGE, avg(WINE.Price) as "Average Price of Wine"
  FROM SCORE_T, WINE) t
GROUP BY t.range
ORDER BY COUNT(*) DESC
;

Спасибо!

1 Ответ

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

Вам нужен JOIN, и вы используете avg() без GROUP BY.Я ожидал бы что-то вроде этого:

SELECT sw.range as Score_Range,
       COUNT(*) as Number_of_Occurrences,
       AVG(sw.Price) as Average_Price
FROM (SELECT (Case when s.Points between 95 and 100 then '95-100'
                   when s.Points between 90 and 94 then '90-94'
                   when s.Points between 85 and 89 then '85-89'
                   when s.Points between 80 and 84 then '80-84'
              end) as RANGE,
           w.Price as Price
     FROM SCORE_T s JOIN
          WINE w
          ON s.? = w.?  -- what are the JOIN keys???
    ) sw
GROUP BY sw.range
ORDER BY COUNT(*) DESC;

? - это заполнитель для столбца, который связывает таблицу результатов и таблицу вин.

...