|
|
|
| добрый день
задача такая - нужно выбрать 10 человек (5 мальчиков и 5 девочек) так чтобы общая их оценка была между 80 и 88
Есть таблица student в ней поля номер ученика-id оценка-mark пол-sex где 1-жен и 2- муж
помогите пожалуйста составить SQL запрос
спасибо | |
|
|
|
|
|
|
|
для: Elina
(24.05.2006 в 12:18)
| | В один запрос скорее всего не получися. А как выбрать, случайным образом или с максимальным баллом?
SELECT * FROM student WHERE sex=1 AND mark BETWEEN 80 AND 88 ORDER BY mark DESC LIMIT 5 UNION SELECT * FROM student WHERE sex=2 AND mark BETWEEN 80 AND 88 ORDER BY mark DESC LIMIT 5
|
| |
|
|
|
|
|
|
|
для: Loki
(24.05.2006 в 12:23)
| | спасибо за момощь
хочу уточнить что их общая сред. ариф. оценка должна быть между 80 и 88 то есть у одного может быть 70 у другого 90 | |
|
|
|
|
|
|
|
для: Elina
(24.05.2006 в 12:18)
| | Нужно получить все такие группы? | |
|
|
|
|
|
|
|
для: Trianon
(24.05.2006 в 12:39)
| | желательно все , но хотя бы получить одну а там... | |
|
|
|
|
|
|
|
для: Trianon
(24.05.2006 в 12:39)
| | Боюсь только, что сервер с этим не справится.
SELECT m1.name, m2.name, m3.name, m4.name, m5.name,
w1.name, w2.name, w3.name, w4.name, w5.name
FROM
student as m1, student as m2, student as m3, student as m4, student as m5,
student as w1, student as w2, student as w3, student as w4, student as w5
WHERE
m1.id < m2.id AND m2.id < m3.id AND m3.id < m4.id AND m4.id < m5.id
AND w1.id < w2.id AND w2.id < w3.id AND w3.id < w4.id AND w4.id < w5.id
AND m1.sex+m2.sex+m3.sex+m4.sex+m5.sex = 10
AND w1.sex+w2.sex+w3.sex+w4.sex+w5.sex = 5
AND (m1.mark+m2.mark+m3.mark+m4.mark+m5.mark+w1.mark+w2.mark+w3.mark
+w4.mark+w5.mark) BETWEEN 800 AND 880
|
| |
|
|
|
|
|
|
|
для: Trianon
(24.05.2006 в 13:03)
| | спасибо ,но это для меня сложновато
воспользовалась примером Loki , немного изменив его
SELECT TOP 5 id,mark FROM student WHERE sex=1
UNION
SELECT TOP 5 id,mark FROM student WHERE sex=2
GROUP BY id, mark
HAVING sum(mark)/10 <90 and sum(mark)/10 <80;
|
но вместо TOP хочу воспользоваться LIMIT , но получаю ошибку
как можно исправить | |
|
|
|
|
|
|
|
для: Elina
(24.05.2006 в 13:48)
| | По-моему, этот запрос работать не будет, даже если убрать ограничение 5+5... | |
|
|
|
|
|
|
|
для: Trianon
(24.05.2006 в 14:12)
| | почему то работает и выдает верно
только
HAVING sum(mark)/10 <90 and sum(mark)/10 >80;
|
| |
|
|
|
|
|
|
|
для: Elina
(24.05.2006 в 15:10)
| | И сумма оценок оказывается в заданных пределах? Не верю. | |
|
|
|
|
|
|
|
для: Trianon
(24.05.2006 в 15:19)
| | да подсчитывает правильно | |
|
|
|
|
|
|
|
для: Elina
(24.05.2006 в 16:19)
| | тогда просто добавьте ограничение вроде такого
HAVING sum(mark)/10 <90 and sum(mark)/10 >80
AND sum((sex-1)*1000+1)=5010
|
| |
|
|
|