Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

SQL запрос - нужна помощь

263
03 июля 2007 года
koltaviy
816 / / 16.12.2004
Сразу извиняюсь за название темы - просто в названии задачи не изложишь..

В MS Access существует запрос(таблица) с полями: Тестируемые_Код, Шкала, Балл.
Необходимо создать SQL запрос на основе данного, определяющий количество человек по каждой шкале, набравших по данной шкале наибольшее количество баллов.
Исходные данные:
1 Шкала1 2
1 Шкала2 4
2 Шкала1 5
2 Шкала2 3
3 Шкала1 1
3 Шкала2 2

Результат:
Шкала1 1
Шкала2 2


Чо-то голова совсем не варит - видимо жара действует :)
Как определить максимальное количество баллов, которое набрал тестируемый понятно, а вот как определить по какой шкале он их набрал.. короче, меня заклинило..
385
04 июля 2007 года
SomewherSomehow
477 / / 25.07.2004
"количество человек по каждой шкале, набравших по данной шкале наибольшее количество баллов."
по твоим данным получается что по шкале1 максимум набрал один человек, 5 баллов, по шкале2 - тоже один человек - максимум 4-е балла, так что результат должен быть:
Шкала1 1
Шкала2 1

Либо если результат должен быть все-таки
Шкала1 1
Шкала2 2
- то объясни задачу получше...
263
04 июля 2007 года
koltaviy
816 / / 16.12.2004
Ты не понял - "набравших по данной шкале наибольшее количество баллов" означает, что человек набрал по данной шкале баллов больше, чем он набрал по другим шкалам. И так для каждого человека.
308
04 июля 2007 года
Комаджу
850 / / 26.07.2006
Попробуй развернуть табличку и показать другой результат.
Не очень понятно, что должно получиться.
263
04 июля 2007 года
koltaviy
816 / / 16.12.2004
Исходные данные:
1 Шкала1 2
1 Шкала2 4
1 Шкала3 1
2 Шкала1 3
2 Шкала2 1
2 Шкала3 2

Результат:
Шкала1 1
Шкала2 1
Шкала3 0

Пояснения:
Шкала1 = 0
Шкала2 = 0
Шкала3 = 0

Тестируемый №1 из трех шкал максимальный балл набрал по шкале Шкала2 (Шкала2++).
Тестируемый №2 из трех шкал максимальный балл набрал по шкале Шкала1 (Шкала1++).
10
04 июля 2007 года
Freeman
3.2K / / 06.03.2004
Тупой вопрос: а шкалы вообще соизмеримы?
263
04 июля 2007 года
koltaviy
816 / / 16.12.2004
Тупой ответ: извини, но не понял, что ты имеешь ввиду под "соизмеримы".. ;)
Ребят, думаю, вы слишком сложно видите задачу..
Задача элементарная, проблема в том, что меня именно заклинило - как только возвращаюсь к ее решению, получается все тоже самое (не тот результат).

К примеру:
Протестирвался человек.
Данный тест предполагает оценку тестируемого по его результатам по несколким шкалам (исходный запрос - это вычисление баллов по каждой шкале).
Находим по какой именно шкале(ам - решения поставленной задачи, исходя из этого, может быть два) он набрал наибольшее количество баллов. Запись с данной шкалой(ами) в результирующем запросе получает значение 1 (один человек набрал для себя по этой шкале максимальный балл).
А теперь перенесем это на несколько тестируемых: по каждому вычисляем, по какой шкале(ам) они набрал максимальный балл, и подсчитываем количество человек по каждой шкале, которые по этой шкале набрали для себя максимальное количество баллов..
10
05 июля 2007 года
Freeman
3.2K / / 06.03.2004
А люди где?
263
05 июля 2007 года
koltaviy
816 / / 16.12.2004
Цитата: Freeman
А люди где?


Какие люди :confused:

10
05 июля 2007 года
Freeman
3.2K / / 06.03.2004
В данных задачи сплошные шкалы, а по условию выбирать надо людей.
263
05 июля 2007 года
koltaviy
816 / / 16.12.2004
Прочитай первый пост: иcходный запрос(Тестируемые_Код, Шкала, Балл)..
По нему и надо все считать! По какой шкале Тестируемый №n(Тестируемый с кодом n) набрал максимальный для себя балл, значение той шкалы и увеличивается на единицу в результирующем запросе.
263
08 июля 2007 года
koltaviy
816 / / 16.12.2004
Задача упрощается ;)

Исходные данные:
1 Шкала1 2
1 Шкала2 4
1 Шкала3 1
2 Шкала1 3
2 Шкала2 1
2 Шкала3 2

Чтобы определить максимальные баллы, которые набрали для себя тестируемые, пишу запрос:
 
Код:
SELECT Запрос1.Тестируемые_Код, Max(Запрос1.Балл) AS [МаксБалл]
FROM Запрос1
GROUP BY Запрос1.Тестируемые_Код

Результат:
1 4
2 3

А как узнать по каким именно шкалам они набрали эти максимальные баллы?
Чтобы получилось:
1 Шкала2
2 Шкала1
263
09 июля 2007 года
koltaviy
816 / / 16.12.2004
Да уж.. Пришлось вернуться к основам..
По последнему моему посту, используя соотнесенные подзапросы, получаем:
 
Код:
SELECT Тестируемые_Код, Шкала
FROM Запрос1 as first_t
WHERE Балл =  
(
SELECT MAX (Балл)
FROM Запрос1 as second_t
WHERE first_t.Тестируемые_Код = second_t.Тестируемые_Код
);

Всем спасибо за "помощь" :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог