2016-11-18 6 views
3

Я использую SQL около недели в моей первой полной задаче, и я пытаюсь вычислить некоторую статистику из запроса, где я объединил столбцы из отдельных столы.SQL: как вычислить среднее значение из запроса

В частности, я пытаюсь вычислить среднее значение из комбинированной таблицы, где у меня были примененные фильтры (или ограничения? Я не понимаю, что такое SQL-лингво).

делать research on Google, я узнал, как рассчитать среднее:

SELECT AVG(column_name) 
FROM table_name 

Проблема у меня в том, что это только кажется, работать с существующими таблицами в базе данных, а не с новыми запросами я создал ,

упрощенная версия моего кода выглядит следующим образом:

SELECT 
    Animal_Facts.Animal_Name, Animal_Facts.Prev_Reg_Amount, 
    Names.Given_Name, Animal_Class.Class_Description 
FROM 
    Names 
INNER JOIN 
    Animal_Facts ON Names.Name_Key = Animal_Facts.Name_Key 
INNER JOIN 
    Animal_Class ON Animal_Facts.Class_Key = Animal_Class.Class_Key 

создает этот запрос объединяет в себе четыре столбца из трех таблиц, где Class_Description описывает ли кастрированное животное, микрочип, принадлежащие пенсионером и т.д., и Pre_Reg_Amount оплачивается регистрационный сбор.

Я хочу найти среднюю плату, уплаченную пенсионеров, поэтому я включил следующую строку кода для фильтрации таблицы:

AND Animal_Class.Class_Description LIKE ('%pensioner%') 

А затем вычислить среднее добавляю:

SELECT AVG(Animal_Facts.Prev_Reg_Amount) from Animal_Facts 

Так что мой общий код:

SELECT 
    Animal_Facts.Animal_Name, Animal_Facts.Prev_Reg_Amount, 
    Names.Given_Name, Animal_Class.Class_Description 
FROM 
    Names 
INNER JOIN 
    Animal_Facts ON Names.Name_Key = Animal_Facts.Name_Key 
INNER JOIN 
    Animal_Class ON Animal_Facts.Class_Key = Animal_Class.Class_Key 
       AND Animal_Class.Class_Description LIKE ('%pensioner%') 

SELECT AVG(Animal_Facts.Prev_Reg_Amount) 
FROM Animal_Facts 

Теперь проблема, после проверки этого расчета в Exce l, я не получаю в среднем данные о пенсионерах, но в среднем по всем данным. Есть ли способ вычислить средние значения (и другие статистические данные) непосредственно из моей созданной таблицы в SQL?

Примечание: Я могу рассчитать все эти статистические данные, экспортируя данные в Excel, но это намного больше времени. Я бы скорее научился делать это в SQL.

+0

Добро пожаловать в мир использования SQL. Трава здесь очень зеленая. – mendosi

+0

@mendosi - Спасибо, друг! –

ответ

5
SELECT AVG(af.Prev_Reg_Amount) 
FROM 
    Animal_Facts af 
    INNER JOIN Animal_Class ac 
    ON af.Class_Key = ac.Class_Key 
    AND Class_Description LIKE ('%pensioner%') 
+0

Спасибо, что я получил номер, который мне нужен, и намного быстрее, чем использование excel. –

+0

Есть ли способ сначала создать таблицу, а затем рассчитать статистику (в виде Excel, как я полагаю), или это лучший способ рассчитать средние значения? –

+0

@BJJBA уверен, что вы можете построить таблицу, но если вы хотите делать группировку и вещи одновременно с созданием таблицы, вам нужно будет использовать несколько разных методов. Проверьте функции окна AVG() OVER(), с CUBE, GROUPING SETS. Excel - это инструмент для интерфейса. Он также не создает статистику одновременно с таблицей, а использует набор данных для создания статистики. SQL-запрос похож на создание набора данных, тогда вы просто добавляете нужные функции сверху. Поэтому, если вы хотите, чтобы AVG() и SUM() выше, просто создайте еще один вычисленный столбец после SELECT AVG(), SUM() ..... – Matt

Смежные вопросы