Как получить student_id из таблицы посещаемости с максимальной посещаемостью? - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть таблица 'tbl_student_daily_attendance', как показано ниже

daily_id|stud_id|status
1       |1      |0
2       |1      |1
3       |1      |0
4       |1      |1
5       |2      |1
6       |2      |1
7       |2      |0
8       |2      |1

Столбец состояния обозначает настоящее и отсутствующее, что составляет 1 и 0 соответственно.

Вывод, который я хочу, - это stud_idс максимальным присутствием (то есть статус = 1)

В вышеприведенном случае он должен вернуть stud_id = 2

Ответы [ 4 ]

0 голосов
/ 28 сентября 2018

Что вы можете сделать, это использовать подзапросы для обработки сценария.Сначала вы можете получить stud_id и соответствующий ему счет, сгруппировав их по идентификатору студента с условием where в статусе.

Select stud_id,count(*) as count from tbl_student_daily_attendance where status=1 
group by stud_id

Затем по результату вышеупомянутого запроса вы можете получить максимальное количество с помощьюСтуденческий билет.Полный запрос будет выглядеть следующим образом:

select stud_id,max(count) from (Select stud_id,count(*) as count from 
tbl_student_daily_attendance where status=1 group by stud_id);

Надеюсь, это поможет !!!

0 голосов
/ 28 сентября 2018

вы можете использовать подзапрос, как показано ниже

 select stud_id
   from 
 tbl_student_daily_attendance
 group by stud_id
 having sum(status) =
  (  select max(s) from
    (select sum(status) s,
   stud_id
   from tbl_student_daily_attendance
   group by stud_id
   ) t1
  )

https://www.db -fiddle.com / f / dLMJQwG44HooExXUnLfTyn / 1

0 голосов
/ 28 сентября 2018

Я бы просто использовал GROUP BY с SUM():

SELECT stud_id
FROM tbl_student_daily_attendance t1 s
GROUP BY stud_id
ORDER BY SUM(status) DESC
LIMIT 1;

Это даст только одну строку, если у вас есть связи с присутствующими с разными учениками, вы можете сделать:

SELECT stud_id
FROM tbl_student_daily_attendance t1 s
GROUP BY stud_id
HAVING SUM(status) = (SELECT MAX(status)
                      FROM (SELECT stud_id, SUM(status) as status
                            FROM tbl_student_daily_attendance t1 s
                            GROUP BY stud_id
                           )
                     );
0 голосов
/ 28 сентября 2018

Вы можете попытаться получить общую сумму на stud_id, что status = 1.Затем упорядочите по общей сумме и получите первое (максимальное присутствие (то есть статус = 1))

Запрос № 1

SELECT stud_id
FROM tbl_student_daily_attendance t1
GROUP BY stud_id
ORDER BY SUM(status = 1)  DESC
LIMIT 1;

Результат

| stud_id |
| ------- |
| 2       |

Показать на БД Fiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...