Как разделить студентов на 3 группы? - PullRequest
0 голосов
/ 02 сентября 2018

У меня в таблице содержится

names | grades | ages

Я заказываю их по оценкам, это запрос:

select * from students order by grades

Я хочу разделить их на три группы по процентам, первая группа - 35 процентов в зависимости от количества студентов и т. Д. От остальных двух групп

Group1 35%
group2 35%
group3 30%

Как я делю их, потому что деление по количеству студентов и этим условиям:

  1. ученики группы 1, которым более 22 лет и старше
  2. ученики группы 1 старше 25 лет и старше
  3. ученики группы 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
...