Как найти средний балл sql

In SQL, sometimes we need to find the average value of a column based on another column of the table such as finding the subject-wise average marks scored by the students of a class. This involves the use of the GROUP BY clause along with the AGGREGATE function like AVG. The same is depicted in the below article. For this, we use a specific kind of query shown in the below demonstration. For this article, we will be using the Microsoft SQL Server as our database.

Step 1: Create a Database. For this use the below command to create a database named GeeksForGeeks.

Query:

CREATE DATABASE GeeksForGeeks

Output:

Step 2: Use the GeeksForGeeks database. For this use the below command.

Query:

USE GeeksForGeeks

Output:

Step 3: Create a table of STDMARKS inside the database GeeksForGeeks. This table has 4 columns namely ROLL_NO, STUDENT_NAME, SUBJECT, and MARKS containing the roll number and name of the students and the subject name and marks scored by the student in the respective subject.

Query:

CREATE TABLE STDMARKS(
ROLL_NO INT,
STUDENT_NAME VARCHAR(10),
SUBJECT VARCHAR(10),
MARKS INT);

Output:

Step 4: Describe the structure of the table STDMARKS.

Query:

EXEC SP_COLUMNS STDMARKS;

Output:

Step 5: Insert 16 rows into the STDMARKS table.

Query:

INSERT INTO STDMARKS VALUES(1,'RAVI','C++',75);
INSERT INTO STDMARKS VALUES(1,'RAVI','ORACLE',84);
INSERT INTO STDMARKS VALUES(1,'RAVI','JAVA',95);
INSERT INTO STDMARKS VALUES(1,'RAVI','OS',62);
INSERT INTO STDMARKS VALUES(2,'VIVEK','C++',46);
INSERT INTO STDMARKS VALUES(2,'VIVEK','ORACLE',70);
INSERT INTO STDMARKS VALUES(2,'VIVEK','JAVA',55);
INSERT INTO STDMARKS VALUES(2,'VIVEK','OS',56);
INSERT INTO STDMARKS VALUES(3,'RAJ','C++',82);
INSERT INTO STDMARKS VALUES(3,'RAJ','ORACLE',84);
INSERT INTO STDMARKS VALUES(3,'RAJ','JAVA',74);
INSERT INTO STDMARKS VALUES(3,'RAJ','OS',92);
INSERT INTO STDMARKS VALUES(4,'MAHESH','C++',43);
INSERT INTO STDMARKS VALUES(4,'MAHESH','ORACLE',49);
INSERT INTO STDMARKS VALUES(4,'MAHESH','JAVA',68);
INSERT INTO STDMARKS VALUES(4,'MAHESH','OS',35);

Output:

Step 6: Display all the rows of the STDMARKS table.

Query:

SELECT * FROM STDMARKS;

Output:

Step 7: Display the SUBJECT and the average marks scored by the students in that subject from the table STDMARKS. For achieving the aggregate value of a column according to another column, we need to use the GROUP BY clause along with the aggregate function such as AVG. The column mentioned after the GROUP BY clause is the basis for our output. The subject-wise average marks are achieved in this manner.

Syntax:

SELECT COLUMN_NAME1,AVG(COLUMN_NAME2) 
AS ALIAS FROM TABLE_NAME GROUP BY COLUMN_NAME1;

Query:

SELECT SUBJECT,AVG(MARKS) AS "AVERAGE MARKS"
FROM STDMARKS GROUP BY SUBJECT;

Output:

Last Updated :
28 Nov, 2021

Like Article

Save Article

to continue to Google Sites

Not your computer? Use Guest mode to sign in privately. Learn more

12.3. Использование языка SQL для выбора информации из таблицы

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

SELECT [ALL/DISTINCT] <список атрибутов>/*
FROM <список таблиц>
[WHERE <условие выборки>]
[ORDER BY <список атрибутов>]
[GROUP BY <список атрибутов>]
[HAVING <условие>]
[UNION<выражение с оператором SELECT>]

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

Ключевое слово ALL означает, что результатом будут все строки, удовлетворяющие условию запроса, в том числе и одинаковые строки. DISTINCT означает, что в результирующий набор не включаются одинаковые строки. Далее идет список атрибутов исходной таблицы, которые будут включены в таблицу-результат. Символ * означает, что в таблицу-результат включаются все атрибуты исходной таблицы.

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

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

Ключевое слово ORDER BY задает операцию упорядочения строк таблицы-результата по указанному списку атрибутов.

В предложении с ключевым словом GROUP BY задается список атрибутов группировки (разъяснение этого и последующего ключевого слова будет представлено немного позднее).

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

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

Рассмотрим реализацию запросов для конкретного примера, представленного в
«Использование формального аппарата для оптимизации схем отношений»
(см.
рис.
8.1)

Выдать список всех студентов.

или

SELECT id_st, surname 
FROM student

Заметим, что если добавить к данному запросу предложение ORDER BY surname, то список будет упорядочен по фамилии. По умолчанию подразумевается, что сортировка производится по возрастанию. Если необходимо упорядочение по убыванию, после имени атрибута добавляется слово DESC.

Выдать список оценок, которые получил студент с кодом «1».

SELECT id_st, mark 
FROM mark_st
WHERE id_st = 1

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

В предложении WHERE можно записывать выражение с использованием арифметических операторов сравнения (<, >, и т.д.) и логических операторов ( AND, OR, NOT ) как и в обычных языках программирования.

SELECT id_st, mark 
FROM mark_st
WHERE ( MARK >= 2 ) AND ( MARK <= 3 )

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

  • IN – вхождение в некоторое множество значений;
  • BETWEEN – вхождение в некоторый диапазон значений;
  • LIKE – проверка на совпадение с образцом;
  • IS NULL – проверка на неопределенное значение.

Оператор IN используется для проверки вхождения в некоторое множество значений. Так, запрос

SELECT id_st, mark
FROM mark_st
WHERE mark IN (2,3)

дает тот же результат, что и вышеуказанный запрос (выведет идентификаторы всех абитуриентов, получивших хотя бы одну двойку или тройку на экзаменах).

Того же результата можно добиться, используя оператор BETWEEN:

SELECT id_st, mark
FROM mark_st
WHERE mark BETWEEN 2 AND 3

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

В этом случае удобно использовать оператор LIKE.

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

_ (символ подчеркивания) – замещает любой одиночный символ;

% (знак процента) – замещает последовательность любого числа символов.

SELECT id_st, surname
FROM student
WHERE surname LIKE 'А%'

Очень часто возникает необходимость произвести вычисление минимальных, максимальных или средних значений в столбцах. Так, например, может понадобиться вычислить средний балл. Для осуществления подобных вычислений SQL предоставляет специальные агрегатные функции:

  • MIN – минимальное значение в столбце;
  • MAX – максимальное значение в столбце;
  • SUM – сумма значений в столбце;
  • AVG – среднее значение в столбце;
  • COUNT – количество значений в столбце, отличных от NULL.

Следующий запрос считает среднее среди всех баллов, полученных студентами на экзаменах.

SELECT 	AVG(mark)
FROM 	mark_st

Естественно, можно использовать агрегатные функции совместно с предложением WHERE:

SELECT AVG(mark)
FROM  mark_st 
WHERE id_st = 100

Данный запрос вычислит средний балл студента с кодом 100 по результатам всех сданных им экзаменов.

SELECT  AVG(mark)
FROM  mark_st
WHERE id_ex = 10

Данный запрос вычислит средний балл студентов по результатам сдачи экзамена с кодом 10.В дополнение к рассмотренным механизмам язык SQL предоставляет мощный аппарат для вычисления агрегатных функций не для всей таблицы результатов запроса, а для разных значений по группам. Для этого в SQL существует специальная конструкция GROUP BY, предназначенная для указания того столбца, по значениям которого будет производиться группировка. Так, например, мы можем вычислить средний балл по всем экзаменам для каждого студента. Для этого достаточно выполнить следующий запрос:

SELECT   id_st, AVG(mark)
FROM     mark_st
GROUP BY id_st

Все это, как обычно, может быть совмещено с предложением WHERE. При этом, не вдаваясь в тонкости выполнения запроса внутри СУБД, можно считать, что сначала выполняется выборка тех строк таблицы, которые удовлетворяют условиям из предложения WHERE, а потом производится группировка и агрегирование.

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

SELECT  id_st, AVG(mark)
FROM  mark_st
WHERE id_ex = 100
GROUP BY  id_st

Заметим, что группировка может производиться более чем по одному полю.

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

Для того чтобы форматировать вывод, существуют различные возможности SQL. Так, например, допустимым является включение текста в запрос. Рассмотрим пример того, как это делается:

SELECT  'Средний балл=', AVG(mark)
FROM  mark_st 
WHERE  id_ex = 10

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

% (знак процента)

– замещает последовательность любого

числа символов.

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

SELECT

name, second_name, surname

FROM

entrant

WHERE

name LIKE ‘А%’

Оператор IS NULL позволяет обнаруживать в таблицы неопределенные значения (напомним, что подобные значения называются

NULL).

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

SELECT

name, second_name, surname

FROM

entrant

WHERE

birth_place IS NULL

Использование агрегатных функций. Простые запросы

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

MIN

– минимальное значение в столбце;

MAX

– максимальное значение в столбце;

SUM

– сумма значений в столбце;

AVG

среднее значение в столбце;

COUNT

количество значений в столбце, отличных от NULL.

Так, следующие запросы считают, соответственно, минимум, максимум, сумму, среднее среди всех баллов, полученными студентами на экзаменах. Количество оценок считает последний запрос.

166

SELECT

MIN(mark)

FROM

mark

SELECT

MAX(mark)

FROM

mark

SELECT

SUM(mark)

FROM

mark

SELECT

AVG(mark)

FROM

mark

SELECT

COUNT(mark)

FROM

mark

Заметим, что, изменив следующим образом текст последнего запроса, мы получим количество разных оценок, полученных на экзаменах:

SELECT COUNT(DISTINCT mark)

FROM mark

Использование агрегатных функций. Комбинирование с предложением WHERE

Дополнительно к описанным выше простым случаям, Вы можете использовать агрегатные функции совместно с предложением

WHERE:

SELECT

AVG(mark)

FROM

mark

WHERE

entrant_id = 100

Данный запрос вычислит средний балл студента с кодом 100 по результатам всех сданных им экзаменов.

SELECT

AVG(mark)

FROM

mark

WHERE

exam_id = 10

Данный запрос вычислит средний балл студентов по результатам сдачи экзамена с кодом 10.

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

167

Использование агрегатных функций и группировка. Предложение GROUP BY

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

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

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

SELECT

entrant_id, AVG(mark)

FROM

mark

GROUP BY

entrant_id

Все это, как обычно, может быть совмещено с предложением WHERE. При этом, не вдаваясь в тонкости выполнения запроса внутри СУБД, Вы можете считать, что сначала выполняется выборка тех строк таблицы, которые удовлетворяют условиям из предложения WHERE, а потом производится группировка и агрегирование.

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

SELECT

entrant_id, AVG(mark)

FROM

mark

WHERE

exam_id = 100

GROUP BY

entrant_id

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

SELECT

entrant_id, mod_date, AVG(mark)

FROM

mark

WHERE

exam_id = 100

GROUP BY

entrant_id, mod_date

168

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

Использование агрегатных функций и группировка. Ограничение результатов запроса. Предложение HAVING

В языке SQL присутствуют средства, которые позволяют Вам сделать следующее: допустим, Вы хотите получить в качестве результатов запроса данные только тех абитуриентов, средний балл которых превышает 4. Как это сделать? Проблема в том, что стандарт языка не допускает использование агрегатных функций в предложении WHERE. Получается, что сначала необходимо выполнить запрос и сосчитать среднее, а потом ограничить результат по условию «Среднее > 4». Для осуществления подобных действий стандартом языка предусмотрена специальная секция HAVING. Так, запрос может выглядеть следующим образом:

SELECT

entrant_id, mod_date, AVG(mark)

FROM

mark

WHERE

exam_id = 100

GROUP BY

entrant_id, mod_date

HAVING

AVG(mark) > 4

Форматирование вывода. Выражения в запросе. Упорядочение

Для того, чтобы форматировать вывод, Вы можете использовать различные возможности SQL. Так, например, допустимым является включение текста в запрос. Рассмотрим пример того, как это делается:

SELECT

‘Средний балл=’, AVG(mark)

FROM

mark

WHERE

exam_id = 10

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

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

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

169

SELECT

‘Средний балл=’, AVG(mark)*2

FROM

mark

WHERE

exam_id = 10

Следующий важный момент связан с осуществлением сортировки (упорядочения) данных. Для организации сортировок в стандарте SQL предусмотрена специальная секция ORDER BY. В этой секции Вам необходимо указать, по какому столбцу (по каким столбцам) упорядочивать результаты запроса. При этом, при использовании нескольких столбцов упорядочение будет производится последовательно (по первому критерию, если значения совпали – по второму критерию и т.д.).

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

SELECT

name, second_name, surname

FROM

entrant

ORDER BY

name

По умолчанию подразумевается, что сортировка производится по возрастанию. Если Вам необходимо упорядочивать по убыванию, необходимо использовать указание «DESC».

SELECT

name, second_name, surname

FROM

entrant

ORDER BY

name DESC

Для упорядочения по возрастанию присутствует указание «ASC», но его обычно не пишут явным образом.

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

SELECT

name, second_name, surname

FROM

entrant

ORDER BY

name DESC, second_name ASC

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

SELECT

entrant_id, mod_date, AVG(mark)

FROM

mark

WHERE

exam_id = 100

170

GROUP BY entrant_id, mod_date

HAVING AVG(mark) > 4

ORDER BY entrant_id

6.4.2.Использование SQL для выбора информации из нескольких таблиц

До сих пор мы рассматривали ту часть SQL, которая касалась выбора информации из единственной таблицы. Естественно, возможности языка этим не ограничиваются. Так, Вы можете запрашивать информацию из нескольких таблиц, реализуя описанные в соответствующем разделе учебника реляционные операции. Рассмотрим некоторые примеры того, как это делается. Стоит упомянуть, что полное рассмотрение этой темы выходит за рамки данного учебника. Подробно этот вопрос можно изучить при помощи, например, [6, 8]. Мы рассмотрим некоторые несложные случаи, часто встречающиеся на практике, в которых присутствует необходимость выбора информации из нескольких таблиц сразу.

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

171

Рис. 49. Пример связанных таблиц

В примере (рис. 48) тоже присутствуют такие таблицы. Рассмот-

рим таблицы entrant, mark и exam.

Таблица mark (оценки) связана с таблицей exam (экзамены) по по-

лям id–entrant_id.

Таблица mark (оценки) связана с таблицей entrant (абитуриенты)

по полям id– exam_id.

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

SELECT

entrant.name, mark.exam_id, mark.mark

FROM

entrant, mark

WHERE

entrant.id = mark.entrant_id

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

1.В секции FROM указаны 2 таблицы.

2.Так таблиц стало больше одной, появилась некоторая неоднозначность при упоминании полей. Так, во многих случаях неизвестно, из какой таблицы из списка FROM брать поле. Для устранения неоднозначности имена полей указываются с префиксом – именем таблицы. Имя таблицы от имени поля отделяется точкой.

3.В предложении WHERE указано условие соединения таблиц.

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

SELECT

entrant.name, exam.exam_date, mark.exam_id,

FROM

mark.mark

entrant,

mark, exam

WHERE

(entrant.id = mark.entrant_id) AND

(exam.id

= mark.exam_id)

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

172

SELECT

E.name, X.exam_date, M.exam_id, M.mark

FROM

entrant E, mark M, exam X

WHERE

(E.id

=

M.entrant_id) AND

(E.id

=

M.exam_id)

6.4.3.Использование SQL для вставки, редактирования и удаления данных в таблицах

Для добавления данных в таблицу в стандарте SQL предусмотрена команда INSERT. Синтаксис команды проще всего понять из следующего запроса:

INSERT INTO mark

VALUES (1, 2, 5, ’01.08.2003’, 11)

Данный запрос вставляет в таблицу mark строку, содержащую значения, перечисленные в списке VALUES.

Если Вы не хотите указывать значение какого-то поля, Вы можете присвоить ему NULL:

INSERT INTO mark

VALUES (1, 2, 5, ’01.08.2003’, NULL)

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

INSERT INTO mark (entrant_id, exam_id, mark) VALUES (1, 2, 5)

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

полями id, name.

INSERT INTO entrant_temp (name)

SELECT

E.name

FROM

entrant E

ORDER BY

E.name

Для удаления данных из таблицы существует команда DELETE.

DELETE

173

Соседние файлы в папке лабы

  • #

    26.04.20151.32 Mб168DB.mdb

  • #
  • #
  • #
  • #
  • #
  • #

У меня есть такая таблица:

[challenge_log]
User_id   |    challenge  |  Try   |   Points
==============================================
  1               1           1            5
  1               1           2            8
  1               1           3            10
  1               2           1            5
  1               2           2            8
  2               1           1            5
  2               2           1            8
  2               2           2            10

Я хочу общий средний балл. Для этого мне нужно 3 шага:

Шаг 1 — Получить МАКСИМАЛЬНОЕ значение (баллов) каждого пользователя в каждом вызове:

User_id   |    challenge  |  Points
===================================
  1               1           10
  1               2           8
  2               1           5
  2               2           10

Шаг 2 — СУММА всех МАКСИМАЛЬНЫХ значений одного пользователя

User_id   |  Points
===================
  1           18
  2           15

Шаг 3 — Средний

AVG = SUM (Points from step 2) / number of users = 16.5

Можете ли вы помочь мне найти запрос для этого?

2014-08-21 18:01

4
ответа

Решение

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

select sum(Points) / count(distinct userid)
from (select userid, challenge, max(Points) as Points
      from challenge_log
      group by userid, challenge
     ) cl;

Вы также можете сделать это с одним уровнем агрегации, найдя максимум в where пункт:

select sum(Points) / count(distinct userid)
from challenge_log cl
where not exists (select 1
                  from challenge_log cl2
                  where cl2.userid = cl.userid and
                        cl2.challenge = cl.challenge and
                        cl2.points > cl.points
                 );

2014-08-21 18:07

Попробуйте это для размера.

  • Общее среднее

    select avg( Points ) as mean_score
    from challenge_log 
    
  • Среднее за вызов

    select challenge ,
           avg( Points ) as mean_score
    from challenge_log
    group by challenge
    

Если вы хотите вычислить среднее значение каждого пользователя, набравшего наибольшее количество баллов за вызов, вы не очень сильно повышаете уровень сложности:

  • Общее среднее

    select avg( high_score )
    from ( select user_id   ,
                  challenge ,
                  max( Points ) as high_score
           from challenge_log
         ) t
    
  • Среднее за вызов

    select challenge ,
           avg( high_score )
    from ( select user_id   ,
                  challenge ,
                  max( Points ) as high_score
           from challenge_log
         ) t
    group by challenge
    

2014-08-21 18:25

После шага 1 сделать

SELECT USER_ID, AVG(POINTS)
FROM STEP1
GROUP BY USER_ID

2014-08-21 18:10

Вы можете объединить шаги 1 и 2 в один запрос / подзапрос следующим образом:

    Select BestShot.[User_ID], AVG(cast (BestShot.MostPoints as money))
    from (select tLog.Challenge, tLog.[User_ID], MostPoints = max(tLog.points) 
            from dbo.tmp_Challenge_Log tLog
            Group by tLog.User_ID, tLog.Challenge
        ) BestShot
    Group by BestShot.User_ID

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

2014-08-21 18:42

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

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

  • Как найти сколько гигабайт осталось
  • Как найти гугл документы на компьютере
  • Как найти синонимы в загадках
  • Как найти объем если известно количество молекул
  • Как найти красивые букеты роз

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

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