У меня в таблице содержится
names | grades | ages
Я заказываю их по оценкам, это запрос:
select * from students order by grades
Я хочу разделить их на три группы по процентам, первая группа - 35 процентов в зависимости от количества студентов и т. Д. От остальных двух групп
Group1 35%
group2 35%
group3 30%
Как я делю их, потому что деление по количеству студентов и этим условиям:
- ученики группы 1, которым более 22 лет и старше
- ученики группы 1 старше 25 лет и старше
- ученики группы 1 старше 30 лет и старше
Это список студентов
names | Ages | Grades|
________________________
1 john | 30 | 20 |
2 saur | 24 | 15 |
3 laban | 22 | 20 |
4 steve | 26 | 16 |
5 sophie| 27 | 20 |
6 barry | 32 | 16 |
7 kevin | 31 | 19 |
8 jenny | 34 | 16 |
группа1 = 8 * 35% /100=2,8, я беру 2 учеников
группа2 = 8 * 35% /100=2,8, я беру 2 учеников
группа3 = 8 * 30% /100=2.4, я беру 2 учеников
Это моя попытка
with tt1 as
( select id,names,grades,datediff(Year,Bdate,current_date) as
ages from students
),
tt2 as
(
select id,names,grades,
case when ages >= 22 and ages < 99 then 1 else 0 end as group1,
case when ages >= 25 and ages < 99 then 1 else 0 end as group2,
case when ages >= 30 and ages < 99 then 1 else 0 end as group3,
from tt1 order by grades desc )
select * from tt2
Здесь количество студентов стало 5. Как это сделать в SQL? Когда я упорядочиваю их по классам, возрастам и делю их на проценты, у меня получается такой результат:
names | Ages | Grades|
________________________
1 john | 30 | 20 |
2 sophie| 27 | 20 |
3 laban | 22 | 20 |
4 kevin | 31 | 19 |
5 jenny | 34 | 16 |
6 barry | 32 | 16 |
7 steve | 26 | 16 |
8 saur | 24 | 15 |
8 students *35% =2.8 this is group1 = John,sophie
group2= kevin,jenny
group3= barry
У меня всего 5 учеников, которые достигли этого состояния.
делю на 5.
5*35%=1.75 so group1 = 1 student
5*35%=1.75 so group2 = 1 student
5*30%=1.5 so group3 = 1 student
Окончательный результат будет
names | Ages | Grades| Groups
_______________________________
1 john | 30 | 20 | 1
2 sophie| 27 | 20 | 2
3 kevin | 31 | 19 | 3