Как найти средний возраст в sql

You should first calculate age from date of birth then find average of age

Select AVG(Datediff("yyyy",DateOfBirth,getdate())) as AVGage from Students
Select MIN(Datediff("yyyy",DateOfBirth,getdate())) as MINage from Students

you can also calucate avg,min in one query

 Select AVG(Datediff("yyyy",DateOfBirth,getdate())) as AVGage , 
        MIN(Datediff("yyyy",DateOfBirth,getdate())) as MINage
        from Students

FOR MS ACCESS DB:

  • Now() provides date and time
  • Date() provides the date
  • Time() provides the time

You can Use Date() Function

 Select AVG(Datediff("yyyy",DateOfBirth,DATE())) as AVGage , 
        MIN(Datediff("yyyy",DateOfBirth,DATE())) as MINage
        from Students

Here is SQLFIDDLE FOR SQLSERVER:

Всем привет, у меня есть практическое задание на курсах, но я не понимаю как его выполнить.

1)Подсчитайте средний возраст пользователей в таблице users.
2)Подсчитайте количество дней рождения, которые приходятся на каждый
из дней недели. Следует учесть, что необходимы дни недели текущего
года, а не года рождения.

Вот данные таблицы, чтобы было проще:

введите сюда описание изображения

Мне говорили что-то про виртуальные таблицы, но до меня не дошло.
Так же знаю что можно datetime((to_days(now()) - to_days(birthday)) / 365.25) — чтобы узнать сколько лет персоне, но дальше этого не идет(( Помогите пожалуйста, как можно было понять, это MySQL.

Вот с подсказкой в комментарии, все еще не понимаю как?
введите сюда описание изображения

Первое сделано так:
введите сюда описание изображения

serjik85

0 / 0 / 0

Регистрация: 22.01.2016

Сообщений: 8

1

Запрос: вычислить средний возраст

22.01.2016, 02:00. Показов 36349. Ответов 13

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Всем привет!
Есть таблица на Microsoft SQL Server, в которой Имя, Фамилия и дата рождения, не могу создать запрос, что бы отобразить людей, которым меньше 30 лет, а так же нужно вычислить средний возраст. Помогите пожалуйста.

T-SQL
1
2
3
SELECT FirstName, LastName FROM dbo.sotr
WHERE DATEDIFF (yyyy, BirthDate, Getdate()) > 30
ORDER BY LastName



0



YakobsEA

268 / 96 / 75

Регистрация: 04.12.2015

Сообщений: 369

Записей в блоге: 1

22.01.2016, 07:20

2

Ваш исходный запрос почти верный, я только знак поменял

T-SQL
1
2
3
SELECT *, GETDATE(),DATEDIFF("YYYY", BirthDate , GETDATE())
FROM sotr
WHERE DATEDIFF("YYYY", BirthDate , GETDATE()) < 30

Запрос для определения среднего возраста:

T-SQL
1
2
3
SELECT AVG(DATEDIFF("YYYY", BirthDate , GETDATE()))
FROM sotr
WHERE DATEDIFF("YYYY", BirthDate , GETDATE()) < 30

Проверял на 2008 сервере.



1



0 / 0 / 0

Регистрация: 22.01.2016

Сообщений: 8

22.01.2016, 08:59

 [ТС]

3

Спасибо огромное! А можно ли еще сделать, что бы выводило возраст сотрудников?



0



268 / 96 / 75

Регистрация: 04.12.2015

Сообщений: 369

Записей в блоге: 1

22.01.2016, 09:07

4

Так уже выводится (через * в первом запросе).

«SELECT * FROM …» — это вывести всё из … (в т.ч. значения поля BirthDate, содержащего дату рождения)



0



0 / 0 / 0

Регистрация: 22.01.2016

Сообщений: 8

22.01.2016, 09:12

 [ТС]

5

Точно, все есть. Не заметил, сори. Еще раз спасибо



0



serjik85

0 / 0 / 0

Регистрация: 22.01.2016

Сообщений: 8

23.01.2016, 20:02

 [ТС]

6

Еще вопросик, есть база, в одной таблице имена и фамилии, в другой заказы, я их объеденил с помощью JOIN как теперь посчтитать кол-во заказов каждого человека в 1997 году? Не понимаю как использовать COUNT. Заранее спасибо!

T-SQL
1
2
3
4
5
6
7
SELECT dbo.Employees.FirstName, dbo.Employees.LastName
    FROM dbo.Employees LEFT JOIN dbo.Orders ON
    DATEPART (yyyy, OrderDate)=1997
    UNION
    SELECT dbo.Employees.FirstName, dbo.Employees.LastName
    FROM dbo.Employees LEFT JOIN dbo.Orders ON
    DATEPART (yyyy, OrderDate)=1997



0



YakobsEA

268 / 96 / 75

Регистрация: 04.12.2015

Сообщений: 369

Записей в блоге: 1

23.01.2016, 20:46

7

Не проверял запрос, но вроде должен работать.
COUNT совместно с GROUP BY возвращает количество записей в группе

SQL
1
2
3
SELECT dbo.Employees.FirstName, dbo.Employees.LastName, COUNT(dbo.Employees.LastName) AS Cnt1
FROM dbo.Employees LEFT JOIN dbo.Orders ON DATEPART (yyyy, OrderDate)=1997
GROUP BY dbo.Employees.FirstName, dbo.Employees.LastName

Только у Вас таблицы не правильно объединены. Условие, которое сейчас участвует в объединении нужно поместить в WHERE, а объединять по идентификаторам клиентов (тех, что делают заказы).



0



0 / 0 / 0

Регистрация: 22.01.2016

Сообщений: 8

23.01.2016, 20:51

 [ТС]

8

Ошибку выбивает
Сообщение 208, уровень 16, состояние 1, строка 1
Invalid object name ‘dbo.Employees’.

А как правильно объединить подскажите пожалуйста. Целый день с этим JOINом мучаюсь



0



YakobsEA

268 / 96 / 75

Регистрация: 04.12.2015

Сообщений: 369

Записей в блоге: 1

23.01.2016, 21:06

9

Лучший ответ Сообщение было отмечено serjik85 как решение

Решение

Странно, у меня подобный запрос работает. Замените «COUNT(dbo.Employees.LastName) AS Cnt1» на «COUNT(*) AS Cnt1»

Что касается JOIN:

SQL
1
2
3
4
SELECT dbo.Employees.FirstName, dbo.Employees.LastName, COUNT(dbo.Employees.LastName) AS Cnt1
FROM dbo.Employees LEFT JOIN dbo.Orders ON dbo.Employees.EmployeeID = dbo.Orders.EmployeeID  
WHERE DATEPART (yyyy, dbo.Orders.OrderDate)=1997
GROUP BY dbo.Employees.FirstName, dbo.Employees.LastName

Поле EmployeeID — идентификатор клиента (как это поле в ваших таблицах называется я к сожалению не знаю). Также оно может называться по своему в каждой из таблиц.



1



0 / 0 / 0

Регистрация: 22.01.2016

Сообщений: 8

23.01.2016, 21:15

 [ТС]

10

Спасибо, заработало, а чем отличается LEFT JOIN от RIGHT JOIN?



0



YakobsEA

268 / 96 / 75

Регистрация: 04.12.2015

Сообщений: 369

Записей в блоге: 1

24.01.2016, 05:43

11

Это почти одно и тоже.
Допустим есть 2 таблицы: А и Б. Нужно объединить их строки по какому-то признаку (или по признакам). LEFT JOIN для каждой строки таблицы А ищет соответствия в таблице Б и производит объединение. RIGHT JOIN для каждой строки таблицы B ищет соответствия в таблице А и производит объединение. Т.е. замена LEFT JOIN на RIGHT JOIN с точки зрения конечного результата эквивалентна изменения порядка упоминания таблиц в запросе:

SQL
1
2
SELECT список полей
FROM A LEFT JOIN B ON условие объединения

вернёт тот же набор записей, что и

SQL
1
2
SELECT список полей
FROM B RIGHT JOIN A ON условие объединения



1



0 / 0 / 0

Регистрация: 22.01.2016

Сообщений: 8

24.01.2016, 15:05

 [ТС]

12

Спасибо большое, разобрался



0



iap

1109 / 754 / 182

Регистрация: 27.11.2009

Сообщений: 2,249

24.01.2016, 15:56

13

Цитата
Сообщение от YakobsEA
Посмотреть сообщение

T-SQL
1
WHERE DATEPART (yyyy, dbo.Orders.OrderDate)=1997

Ну и ну!
Столько глупостей в таком коротком фрагменте!
1. Ограничения, накладываемые на правую таблицу LEFT JOINа в WHERE, почти всегда превращает его в INNER JOIN.
2. Ограничения, накладываемые на функцию от поля, а не на само поле, не дают возможности оптимизатору использовать индекс, если он есть.

Самое главное — нигде не показано правильного вычисления возраста человека.
Так что непонятно, как же предлагается вычислить среднее от него.
Связь таблиц должна быть такая, если нужен именно LEFT JOIN:

T-SQL
1
2
3
4
5
FROM dbo.Employees E
LEFT JOIN dbo.Orders O
  ON E.EmployeeID=O.EmployeeID
 AND O.OrderDate>='1997'
 AND O.OrderDate<'1998'



0



YakobsEA

268 / 96 / 75

Регистрация: 04.12.2015

Сообщений: 369

Записей в блоге: 1

24.01.2016, 20:04

14

Да, представленный запрос оптимальнее. Я как-то об оптимизации не задумывался, каюсь.
В последних запросах о среднем возрасте речи не идёт, но там где идёт условие не вполне корректно сформировано из-за большой погрешности. Например, DATEDIFF(«YYYY», ‘2015-12-31’, ‘2016-01-01’) вернёт 1, хотя годом там и не пахнет . С учётом замечаний по оптимальности кода более правильный запрос для расчёта среднего значения ПОЛНЫХ лет такой:

T-SQL
1
2
3
SELECT AVG(DATEDIFF("MM", BirthDate , GETDATE())/12)
FROM sotr
WHERE BirthDate > DATEADD ("YY", -30, GETDATE())



0



Поиск
минимального и максимального значений

В
MySQL имеются встроенные функции для
вычисления минимального и максимального
значений.

SQL
имеет 5 агрегатных функций.

MIN():
минимальное значение

MAX():
максимальное значение

SUM():
сумма значений

AVG():
среднее значений

COUNT():
подсчитывает число записей

В
этом параграфе мы рассмотрим поиск
минимального и максимального значений
столбца.

Минимальное
значение

select
MIN(salary) from employee_data;

На
рисунке приведен результат запроса.

Рисунок
1.2.7.1 – Поиск минимальной зарплаты

Максимальное
значение

select
MAX(salary) from employee_data;

На
рисунке приведен результат запроса.

Рисунок
1.2.7.2 – Поиск максимальной зарплат

Поиск
среднего значения и суммы

Суммирование
значений столбца с помощью функции SUM

Агрегатная
функция SUM()
вычисляет
общую сумму
значений в столбце. Для этого необходимо
задать имя столбца, которое должно быть
помещено внутри скобок.

Давайте
посмотрим, сколько компания BigFoot тратит
на зарплату своих сотрудников.

select
SUM(salary) from employee_data;

На
рисунке приведен результат запроса.

Рисунок
1.2.7.2 – Сумма всех зарплат

Аналогично
можно вывести общую сумму надбавок,
выдаваемых сотрудникам.

select
SUM(perks) from employee_data;

На
рисунке приведен результат запроса.

Рисунок
1.2.7.3 – Сумма всех надбавок

Можно
найти также общую сумму зарплаты и
надбавок.

select
sum(salary) + sum(perks) from employee_data;

На
рисунке приведен результат запроса.

Рисунок
1.2.7.4 – Общая сумма зарплаты и надбавок

Здесь
показаны также дополнительные возможности
команды SELECT. Значения можно складывать,
вычитать, умножать или делить. В
действительности можно записывать
полноценные арифметические выражения.

Вычисление
среднего значения

Агрегатная
функция AVG()
используется для вычисления среднего
значения данных в столбце.

select
avg(age) from employee_data;

На
рисунке приведен результат запроса.

Рисунок
1.2.7.5 – Средний возраст сотрудников

Пример
выше вычисляет средний возраст сотрудников
компании BigFoot, а следующий выводит
среднюю зарплату.

select
avg(salary) from employee_data;

На
рисунке приведен результат запроса.

Рисунок
1.2.7.6 – Средняя зарплата сотрудников

Именование
столбцов

MySQL
позволяет задавать имена для выводимых
столбцов. Поэтому вместо f_name
или l_name
и т.д. можно использовать более понятные
и наглядные термины. Это делается с
помощью оператора AS.

select
avg(salary) AS

‘Средняя
зарплата’ from

employee_data;

На
рисунке приведен результат запроса.

Рисунок
1.2.7.7 – Вывод средней зарплаты с
использованием псевдо-имен столбцов.

Такие
псевдо-имена могут сделать вывод более
понятным для пользователей. Важно только
помнить, что при задании псевдо-имен с
пробелами необходимо заключать такие
имена в кавычки. Вот еще один пример:

select
(SUM(perks)/SUM(salary) * 100)

AS
‘Процент надбавок’ from

employee_data;

На
рисунке приведен результат запроса.

Рисунок
1.2.7.8 – Вывод процента зарплаты,
которую сотрудники получают в качестве
надбавок с использованием псевдо-имен

Подсчет
числа записей

Агрегатная
функция COUNT()
подсчитывает и выводит общее число
записей. Например, чтобы подсчитать
общее число записей в таблице, выполните
следующую команду.

select
COUNT(*) from employee_data;

На
рисунке приведен результат запроса.

Рисунок
1.2.7.9 – Общее количество записей

Как
мы уже знаем, знак * означает «все
данные».

Теперь
давайте подсчитаем общее число
сотрудников, которые занимают должность
«программист».

select
COUNT(*) from employee_data

where
title = ‘программист’;

На
рисунке приведен результат запроса.

Рисунок
1.2.7.10 – Общее количество
сотрудников-программистов

Группировка
данных

Предложение
GROUP BY
позволяет группировать аналогичные
данные. Поэтому, чтобы вывести все
уникальные должности в таблице, можно
выполнить команду

select
title from employee_data

GROUP
BY title;

На
рисунке приведен результат запроса.

Рисунок
1.2.7.11 – Все уникальные должности
сотрудников

Вот
как можно подсчитать число сотрудников
имеющих определенную должность.

select
title, count(*)

from
employee_data GROUP BY title;

На
рисунке приведен результат запроса.

Рисунок
1.2.7.12 – Количество сотрудников по
должностям

В
предыдущей команде MySQL сначала создает
группы различных должностей, а затем
выполняет подсчет в каждой группе.

Сортировка
данных

Теперь
давайте найдем и выведем число сотрудников,
имеющих различные должности, и отсортируем
их с помощью ORDER
BY.

select
title, count(*) AS Number

from
employee_data

GROUP
BY title

ORDER
BY
Number;

На
рисунке приведен результат запроса.

Рисунок
1.2.7.13 – Количество сотрудников по
должностям с сортировкой

SQL или язык структурированных запросов — это язык программирования, используемый для связи с базами данных. Это позволяет пользователям извлекать, манипулировать и управлять данными, хранящимися в системах управления реляционными базами данных (RDBMS). SQL — это мощный инструмент для анализа данных, поскольку он позволяет пользователям быстро и легко получать доступ к большим объемам данных, хранящихся в базе данных, и манипулировать ими. В этой статье мы рассмотрим основы использования SQL для анализа данных.

SQL или язык структурированных запросов — это язык программирования, используемый для управления данными, хранящимися в реляционных базах данных, и манипулирования ими. Это мощный инструмент для анализа данных, поскольку он позволяет пользователям легко извлекать и обрабатывать большие объемы данных организованным и эффективным образом.

Чтобы использовать SQL для анализа данных, выполните следующие действия:

  1. Подключение к базе данных: чтобы использовать SQL, вам необходимо подключиться к базе данных. Это можно сделать с помощью программного инструмента, такого как SQL Server Workbench, или через интерфейс командной строки.
  2. Напишите оператор SELECT: Оператор SELECT используется для извлечения данных из базы данных. Вы можете указать, какие столбцы вы хотите извлечь, а также любые условия, которые должны быть выполнены. Например, вы могли бы написать оператор SELECT, подобный:
SELECT * FROM sales WHERE date >= '2022-01-01';

Это позволит получить все строки из таблицы продаж, где столбец даты больше или равен 1 января 2022 года.

  • Используйте агрегатные функции: Агрегатные функции позволяют выполнять вычисления с несколькими строками данных. Например, вы можете использовать функцию SUM для вычисления общей суммы всех продаж за данный период времени или функцию AVG для вычисления средней цены продажи.
  • Используйте предложения GROUP BY и HAVING: предложение GROUP BY позволяет группировать строки данных на основе общих значений в столбце. Предложение HAVING позволяет указать условия, которым должны соответствовать группы. Например, вы можете использовать следующий оператор, чтобы сгруппировать продажи по продуктам и показать только те, общая сумма которых превышает 100 долларов США:
SELECT product, SUM(sales) FROM sales GROUP BY product HAVING SUM(sales) > 100;
  • Используйте предложения JOIN: предложение JOIN позволяет вам объединять данные из нескольких таблиц в одном запросе. Это может быть полезно для анализа данных, разбросанных по нескольким таблицам, или для объединения данных из разных источников.
  • Сохраняйте результаты и делитесь ими. После того, как вы получили данные и обработали их, вы можете сохранить результаты в новой таблице или экспортировать их в файл. Затем вы можете поделиться своими результатами с другими, отправив им файл или предоставив им доступ к таблице в базе данных.

Следуя этим шагам, вы сможете использовать SQL для эффективного и действенного анализа больших объемов данных, хранящихся в базе данных.

Подключение к базе данных

Первым шагом в использовании SQL для анализа данных является установление соединения с базой данных. Это можно сделать с помощью инструмента управления базой данных, такого как MySQL Workbench, или с помощью языка программирования, поддерживающего запросы SQL, например Python или R.

Чтобы подключиться к базе данных с помощью MySQL Workbench, вам потребуется ввести данные подключения к базе данных, включая имя хоста, порт, имя пользователя и пароль. После того, как вы введете эти данные и нажмете кнопку «Connect», вы будете подключены к своей базе данных и сможете начать выполнять команды SQL.

Выбор данных

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

Например, чтобы получить все строки и столбцы из таблицы «customers», вы можете использовать следующую инструкцию SELECT:

Вы также можете использовать предложение WHERE, чтобы указать условия, которым должны соответствовать данные. Например, чтобы получить только строки, в которых столбец «city» — «New York», вы можете использовать следующую инструкцию SELECT:

SELECT * FROM customers WHERE city = 'New York';

Фильтрация и сортировка данных

После извлечения данных вы можете использовать различные предложения и функции для фильтрации и сортировки данных. Например, вы можете использовать предложение WHERE для фильтрации данных на основе определенных условий, а предложение ORDER BY — для сортировки данных в порядке возрастания или убывания.

Например, чтобы получить только строки, где столбец «age» больше 30, и отсортировать результаты по столбцу «name» в порядке возрастания, вы можете использовать следующую инструкцию SELECT:

SELECT * FROM customers WHERE age > 30 ORDER BY name ASC;

Выполнение расчетов

SQL позволяет выполнять различные вычисления с данными, например суммировать значения в столбце или находить среднее значение набора значений. Вы можете использовать функцию SUM для суммирования значений в столбце и функцию AVG для нахождения среднего значения набора значений.

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

SELECT SUM(sales) FROM customers;

Чтобы найти средний возраст всех клиентов, вы можете использовать следующий оператор SELECT:

SELECT AVG(age) FROM customers;

Групповые и сводные данные

SQL также позволяет вам группировать данные и поворачивать их, чтобы вы могли видеть их по-разному. Предложение GROUP BY позволяет группировать данные по определенному столбцу, а функция PIVOT позволяет преобразовывать данные из строк в столбцы.

Он обычно используется при анализе данных, поскольку позволяет пользователям легко извлекать, обрабатывать и анализировать данные из базы данных.

Мы предоставим краткий обзор того, как использовать SQL для анализа данных.

  • Подключение к базе данных. Первым шагом в использовании SQL для анализа данных является подключение к базе данных. Обычно это можно сделать с помощью инструмента управления базой данных, такого как MySQL Workbench или Microsoft SQL Server Management Studio.
  • Напишите оператор SELECT: как только вы подключитесь к базе данных, вы можете начать извлечение данных с помощью оператора SELECT. Оператор SELECT используется для извлечения данных из таблицы базы данных и имеет следующий синтаксис:
SELECT column_1, column_2, ... 
FROM table_name 
WHERE condition;

Например, чтобы получить все данные из таблицы с названием «sales», вы можете использовать следующую инструкцию SELECT:

  1. Используйте фильтры и условия. Предложение WHERE оператора SELECT позволяет указать условия для фильтрации извлекаемых данных. Например, вы можете использовать предложение WHERE только для получения данных за определенный период времени или данных, соответствующих определенным критериям.
  2. Агрегируйте данные с помощью GROUP BY и HAVING. Предложение GROUP BY позволяет группировать данные по одному или нескольким столбцам, а предложение HAVING позволяет указать условия для групп. Это может быть полезно для агрегирования данных и расчета сводной статистики, такой как подсчеты, суммы и средние значения.
  3. Используйте JOIN для объединения данных из нескольких таблиц. Предложение JOIN позволяет вам объединять данные из нескольких таблиц в одном операторе SELECT. Это может быть полезно для извлечения данных, разбросанных по нескольким таблицам, и объединения их в единый набор данных для анализа.
  4. Используйте подзапросы для извлечения данных на основе результатов другого запроса: Подзапрос — это оператор SELECT, вложенный в другой оператор SELECT. Его можно использовать для извлечения данных на основе результатов внешнего запроса.
  5. Используйте общие функции и операторы: SQL включает в себя широкий спектр функций и операторов, которые можно использовать для управления данными и выполнения вычислений. Некоторые общие функции и операторы включают SUM, AVG, MAX, MIN, COUNT и CASE.

Следуя этим шагам и используя различные предложения, функции и операторы, доступные в SQL, вы сможете эффективно использовать SQL для анализа данных. Кроме того, SQL можно использовать в маркетинговой аналитике для определения ценности сегментов. Это мощный и универсальный инструмент, который можно использовать для извлечения, обработки и анализа данных из базы данных.

Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Как найти производную 2cosx
  • Как найти плотность пленки
  • Как найти массу конденсированного пара
  • Как найти лямбда максимум
  • Как найти где живет человек бесплатно

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии