2 votes

Calculer le nombre total d'hommes et de femmes dans chaque groupe avec CodeIgniter

Comment puis-je trouver le nombre d'hommes et de femmes dans chaque section en utilisant les méthodes de générateur de requêtes de CodeIgniter?

J'ai déjà essayé Count, select, sum avec regroupement, mais je n'arrive toujours pas à obtenir le résultat souhaité.

Ce que je veux, c'est obtenir le nom de la section, son nombre total d'élèves, et le décompte séparé des hommes et des femmes. Je veux faire cela avec 1 seule requête.

Résultat souhaité:

Homme

Femme

Section 1

10

Section 2

8

Schema de la table:

  • tbl_section: section_id, section_name
  • tbl_student: stud_id,stud_name,gender,section_id(clé étrangère)

Mes tentatives de code:

$total =$this->db
    ->selectCount('gender')
    ->from(tbl_student)
    ->join('tbl_section','tbl_student.section_id = tbl_section.section_id)
    ->where('tbl_student.gender = "male")
    ->get()
    ->result_array();

Tentative de SQL brut:

select section.section_name,count(stud_id)
from tbl_student
join section on tbl_student.section_id=section.section_id
where tbl_student.gender = "Male"
group by section.section_id;

Résultat: Seul un genre est affiché -- je veux afficher à la fois les hommes et les femmes.

1voto

mickmackusa Points 18931

Vous voulez regrouper par les identifiants de section, puis calculer deux compteurs conditionnels dans la requête qui se rapportent à chaque identifiant de section regroupé.

Le SQL brut ressemble à ceci : (démonstration db-fiddle)

SELECT sec.section_name, SUM(gender = 'M') males, SUM(gender = 'F') females
FROM tbl_section AS sec
JOIN tbl_student AS stu ON sec.section_id = stu.section_id
GROUP BY section_name

Pour traduire ceci en méthodes du générateur de requêtes CI :

return $this->db
    ->select("sec.section_name section, SUM(gender = 'M') males, SUM(gender = 'F') females")
    ->from('tbl_section sec')
    ->join('tbl_student stu', 'sec.section_id = stu.section_id')
    ->group_by('section_name')
    ->get()
    ->result();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X