Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Помогите построить запрос, плиз!
|
|||
|---|---|---|---|
|
#18+
Есть таблица с поялми Code, Name, Speciality (код специальности), Score(результат экзамена), это абитуриенты с результатами экзамена. Нужно посчитать проходной бал на каждой специальности, если на специальность максимум 25 человек! Помогите, а то даже не знаю откуда плясать... Заранее спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2001, 07:12 |
|
||
|
Помогите построить запрос, плиз!
|
|||
|---|---|---|---|
|
#18+
SELECT Speciality, AVG(Score) FROM mytable GROUP BY Speciality HAVING (COUNT(*) > 25) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2001, 07:24 |
|
||
|
Помогите построить запрос, плиз!
|
|||
|---|---|---|---|
|
#18+
Извиняюсь - поторопился и недочитал. А как рассчитывается проходной балл ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2001, 07:26 |
|
||
|
Помогите построить запрос, плиз!
|
|||
|---|---|---|---|
|
#18+
Есть 25 мест, зачисляются абитуриенты с наивысшими оценками, проходной бал - это минимальная такая оценка, с которой человек будет зачислен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2001, 07:33 |
|
||
|
Помогите построить запрос, плиз!
|
|||
|---|---|---|---|
|
#18+
Это понятно, что минимальная . Проходной балл задается как переменная или должен рассчитываться из этой же таблицы ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2001, 07:37 |
|
||
|
Помогите построить запрос, плиз!
|
|||
|---|---|---|---|
|
#18+
Select top 25 sp.speciality, min(sc.score) from Speciality sp, score sc where sp.ID = sc.ID group by sp.spesiality Я правда не знаю точно можно ли ставить вместе top и group by, но если можно, то по моему должно работать, сорри проверять лень, особенно после вчерашнего пива ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2001, 07:39 |
|
||
|
Помогите построить запрос, плиз!
|
|||
|---|---|---|---|
|
#18+
To Glory: Задача как раз и стоит что бы посчитать этот проходной бал! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2001, 07:51 |
|
||
|
Помогите построить запрос, плиз!
|
|||
|---|---|---|---|
|
#18+
To Genady: Обязательно попробую вечером! Но что-то не верится как-то... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2001, 07:54 |
|
||
|
Помогите построить запрос, плиз!
|
|||
|---|---|---|---|
|
#18+
2 Zelius Не не получится с моим запросом, он вернет первые 25 записей а потом группировать будет, но топтаться по моему в этом направлении нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2001, 08:04 |
|
||
|
Помогите построить запрос, плиз!
|
|||
|---|---|---|---|
|
#18+
То есть я хотел сказать что этот запрос сработает по одной специальности, если условие в where поставить. самый тупой варинат в цикле перебрать все специальности, но вероятно что то можно и поизящнее придумать мне просто сейчас думается с трудом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2001, 08:07 |
|
||
|
Помогите построить запрос, плиз!
|
|||
|---|---|---|---|
|
#18+
Если с ходу, не задумываясь, то так: declare @mytable table ( name varchar(33), Speciality int, Score int) SELECT Speciality, min(Score) from @mytable m1 where m1.name in (select top 25 m2.name from @mytable m2 where m1.Speciality=m2.Speciality order by Score desc) group by Speciality Понятно что это неоптимально по скорости. Но думать лень. Надеюсь хоть откуда плясать Вы теперь знаете Единственно я не понял для чего Code надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2001, 08:18 |
|
||
|
Помогите построить запрос, плиз!
|
|||
|---|---|---|---|
|
#18+
Я вот тоже подумал, что должен быть более изящный способ, чем создавать временную таблицу, курсор, ходить и считать для каждой специальности отдельно несколькими запросами... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2001, 08:20 |
|
||
|
Помогите построить запрос, плиз!
|
|||
|---|---|---|---|
|
#18+
А можно в качестве TOP передать значение поля, если количество мест на специальности будет храниться в таблице специальностей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2001, 08:34 |
|
||
|
Помогите построить запрос, плиз!
|
|||
|---|---|---|---|
|
#18+
в качестве TOP передать значение поля нельзя, так что развиваете такой вариант: select Speciality, min(Score) from (SELECT m1.Speciality, m1.Score from @mytable m1, @mytable m2 where m1.Speciality=m2.Speciality and m2.Score>=m1.Score group by m1.Speciality, m1.Score having count(*)<=25) as ss group by Speciality (проверьте, я мог неправильно поставать больше-меньше) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2001, 08:41 |
|
||
|
Помогите построить запрос, плиз!
|
|||
|---|---|---|---|
|
#18+
Вообще говоря, задача более сложна, нежели может показаться на первый взгляд. Возможная ситуация - 30 абитуриентов набрали на экзаменах максимальный балл. И что тогда делать ? Смотреть по национальности и партийности ? А может еще и душещипательную беседу провести ? Патронов на всех может не хватить Впрочем, это проблема приемной комиссии... Есть подозрение, что код ниже - как раз то, что Вам нужно. /*Создать тестовую таблицу*/ CREATE TABLE Table1 (Code int NOT NULL, Speciality tinyint NOT NULL, Score tinyint NULL) GO ALTER TABLE Table1 WITH NOCHECK ADD CONSTRAINT PK_Table1 PRIMARY KEY CLUSTERED (Code, Speciality) GO /*Добавить тестовые данные. Простейший случай...*/ DECLARE @i tinyint SET @i = 1 WHILE @i < 51 BEGIN INSERT INTO Table1 (Code, Speciality, Score) VALUES (@i, 1, @i) SET @i = @i + 1 END SET @i = 1 WHILE @i < 101 BEGIN INSERT INTO Table1 (Code, Speciality, Score) VALUES (50 + @i, 2, @i) SET @i = @i + 1 END /*Основной запрос. Возвращает минимальный балл, которую должен иметь абитуриент дабы попасть в число 25 "счастливчиков"*/ SELECT t1.Speciality, MIN(t1.Score) AS Score FROM Table1 t1 WHERE t1.Score IN (SELECT TOP 25 Score FROM Table1 t2 WHERE t2.Speciality = t1.Speciality ORDER BY t2.Score DESC) GROUP BY t1.Speciality /*Дополнительный запрос. Возвращает "счастливчиков", имеющих балл не ниже проходного. В соотвествии со сказанным в начале, может превышать 25 человек*/ SELECT t.* FROM (SELECT t1.Speciality, MIN(t1.Score) AS Score FROM Table1 t1 WHERE t1.Score IN (SELECT TOP 25 Score FROM Table1 t2 WHERE t2.Speciality = t1.Speciality ORDER BY t2.Score DESC) GROUP BY t1.Speciality) AS st INNER JOIN Table1 t ON (t.Speciality = st.Speciality AND t.Score >= st.Score) P.S. Если для каждой специальности свое количество вакансий, то одним запросом это будет посложнее изобразить, но тоже, пожалуй, можно. Думать надо, но времени P.S. И напрасно Вы избегаете курсоров, в частности - FORWARD_ONLY, но это отдельный разговор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2001, 08:44 |
|
||
|
Помогите построить запрос, плиз!
|
|||
|---|---|---|---|
|
#18+
Сорри, Просмотрел... Подобный вариант уже был ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2001, 08:46 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32010511&tid=1826037]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 378ms |

| 0 / 0 |
