Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выбрать 10 человек по критерию
 
 автор: Elina   (24.05.2006 в 12:18)   письмо автору
 
 

добрый день

задача такая - нужно выбрать 10 человек (5 мальчиков и 5 девочек) так чтобы общая их оценка была между 80 и 88

Есть таблица student в ней поля номер ученика-id оценка-mark пол-sex где 1-жен и 2- муж

помогите пожалуйста составить SQL запрос

спасибо

   
 
 автор: Loki   (24.05.2006 в 12:23)   письмо автору
 
   для: 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

   
 
 автор: Elina   (24.05.2006 в 12:57)   письмо автору
 
   для: Loki   (24.05.2006 в 12:23)
 

спасибо за момощь

хочу уточнить что их общая сред. ариф. оценка должна быть между 80 и 88 то есть у одного может быть 70 у другого 90

   
 
 автор: Trianon   (24.05.2006 в 12:39)   письмо автору
 
   для: Elina   (24.05.2006 в 12:18)
 

Нужно получить все такие группы?

   
 
 автор: Elina   (24.05.2006 в 13:00)   письмо автору
 
   для: Trianon   (24.05.2006 в 12:39)
 

желательно все , но хотя бы получить одну а там...

   
 
 автор: Trianon   (24.05.2006 в 13:03)   письмо автору
 
   для: 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

   
 
 автор: Elina   (24.05.2006 в 13:48)   письмо автору
 
   для: 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 , но получаю ошибку

как можно исправить

   
 
 автор: Trianon   (24.05.2006 в 14:12)   письмо автору
 
   для: Elina   (24.05.2006 в 13:48)
 

По-моему, этот запрос работать не будет, даже если убрать ограничение 5+5...

   
 
 автор: Elina   (24.05.2006 в 15:10)   письмо автору
 
   для: Trianon   (24.05.2006 в 14:12)
 

почему то работает и выдает верно

только

HAVING sum(mark)/10 <90 and sum(mark)/10 >80; 

   
 
 автор: Trianon   (24.05.2006 в 15:19)   письмо автору
 
   для: Elina   (24.05.2006 в 15:10)
 

И сумма оценок оказывается в заданных пределах? Не верю.

   
 
 автор: Elina   (24.05.2006 в 16:19)   письмо автору
 
   для: Trianon   (24.05.2006 в 15:19)
 

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

   
 
 автор: Trianon   (24.05.2006 в 16:27)   письмо автору
 
   для: Elina   (24.05.2006 в 16:19)
 

тогда просто добавьте ограничение вроде такого

HAVING sum(mark)/10 <90 and sum(mark)/10 >80
AND sum((sex-1)*1000+1)=5010

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования