-1
votes

Je suis nouveau à SQL et j'ai du mal à sélectionner à partir de la base de données

J'ai la table suivante avec les détails de l'étudiant et GPA

|clg_id  | sem1_sgpa |  sem2_sgpa|
---------------------------------
|o170431 |    9.6    |  9.8     |
|o170440 |    9.2    |  8.6     |
|o170450 |    8.2    |  9.1     |
--------------------------------


4 commentaires

Basé sur quoi? Expliquez votre condition. Montrez ensuite ce que vous avez essayé, cela a déjà été discuté. Voir Comment demander et exemple de reproductible minimal . Vous devriez compléter la visite qui explique les bases pour l'utiliser.


Si vous avez un SEM3, vous attendriez-vous une colonne supplémentaire dans les résultats pour cela?


oui s'il y a SEM 3, je veux une colonne supplémentaire


Vous devriez rechercher un pivot MySQL et une agrégation conditionnelle MySQL.


3 Réponses :


2
votes

Vous pouvez utiliser case code> avec somme code> pour obtenir la sortie.

case code> est de filtrer la valeur spécifique de la colonne SEM_TYPE code>. p>

somme code> avec Groupe par code> est de résumer toutes les valeurs et de produire un résultat unique. P> xxx pré>

oui s'il y a SEM3, je veux une colonne supplémentaire em> p>

forte>, il peut être réalisé en créant une requête dynamique à l'aide d'une déclaration préparée. P>

SO TELIALEMENT, il fonctionnera pour N code> Numéro de SEM (S) au lieu de mettre à jour la requête manuellement. P>

select 
group_concat(concat("sum(case when sem_type = '",sem_type,"' then ",sgpa," end) as ",sem_type,"_sgpa")) 
into @dynamiccol
from (select sem_type from student_details group by sem_type) t;

set @dynamicquery = concat("select clg_id, ",@dynamiccol," from student_details group by clg_id");

prepare stmt from @dynamicquery;
execute stmt;
deallocate prepare stmt;


4 commentaires

Comment GROUP_CONCAT ET CASE fonctionne, pouvez-vous expliquer


La requête ci-dessus est-elle travaillant?


oui cette requête fonctionne parfaitement


Depuis que vous n'avez pas mentionné le type de données de colonne, j'ai ajouté group_concat ou somme fonctionne aussi bien.



2
votes

Quelque chose comme ça devrait fonctionner: xxx

Demo Fiddle ici: https://www.db-fiddle.com/f/ohgnnz1w9n7tdrz5ak16ey/1


0 commentaires

2
votes
SELECT
p1.clg_id as cig_id ,p1.sgpa as sem1_gpa,p2.sgpa as sem2_gpa 
from
(select sgpa,clg_id from student_details where  sem_type='sem1') as p1
inner join
(select sgpa,clg_id from student_details where  sem_type='sem2') as p2  
on p1.clg_id = p2.clg_id ;

1 commentaires

Bien que ce code puisse répondre à la question, fournissant un contexte supplémentaire concernant la raison et / ou la manière dont ce code répond à la question améliore sa valeur à long terme. Pourquoi avez-vous appliqué ce code, où est l'accent, des résultats de cette requête? Je vous recommanderais de vérifier alors officiel Comment répondre à l'article ainsi que le compréhensive Blog POST de JON SKEET .