Maison > base de données > tutoriel mysql > le corps du texte

Exemple de MySQL implémentant des statistiques SQL

黄舟
Libérer: 2017-09-08 13:29:40
original
1801 Les gens l'ont consulté

Déclaration de création de table

/*Table structure for table `stuscore` */

DROP TABLE IF EXISTS `stuscore`;

CREATE TABLE `stuscore` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `subject` varchar(20) DEFAULT NULL,
  `score` varchar(20) DEFAULT NULL,
  `stuid` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;

/*Data for the table `stuscore` */

insert  into `stuscore`(`id`,`name`,`subject`,`score`,`stuid`) values 
(1,'张三','数学','89','1'),
(2,'张三','语文','80','1'),
(3,'张三','英语','70','1'),
(4,'李四','数学','90','2'),
(5,'李四','语文','70','2'),
(6,'李四','英语','80','2'),
(7,'王五','数学','55','3'),
(8,'王五','语文','92','3'),
(9,'王五','英语','74','3'),
(10,'赵六','数学','62','4'),
(11,'赵六','语文','81','4'),
(12,'赵六','英语','93','4');

建表语句
Copier après la connexion

Question :

1. Calculez le score total et le classement de chaque personne (champs d'affichage obligatoires : nom, score total)

Réponse


1 SELECT a.name, SUM(score) sum_score FROM stuscore a
2 GROUP BY a.name ORDER BY sum_score DESC
Copier après la connexion

2. Calculez le score total de chaque personne. score total et classement (champs d'affichage obligatoires : carte d'étudiant, nom, score total)

Réponse


1 SELECT a.stuid, a.name, SUM(score) sum_score FROM stuscore a
2 GROUP BY a.name ORDER BY sum_score DESC
Copier après la connexion

Calculer le sujet unique de chaque personne. score le plus élevé (champs d'affichage obligatoires : numéro d'étudiant, nom, cours, score le plus élevé)

Réponse


1 SELECT a.stuid, a.name, a.subject, a.score FROM stuscore a
2 JOIN (
3     SELECT stuid, MAX(score) max_score FROM stuscore GROUP BY stuid4 )b ON a.stuid=b.stuid5 WHERE a.score=b.max_score
Copier après la connexion

4. (Champs d'affichage obligatoires : numéro d'élève, nom, note moyenne)

Réponse


1 SELECT DISTINCT a.stuid, a.name, b.avg_score FROM stuscore a
2 JOIN (
3     SELECT stuid, AVG(score) avg_score FROM stuscore GROUP BY stuid
4 )b ON a.stuid=b.stuid
Copier après la connexion

5. score dans chaque cours (champs d'affichage obligatoires : numéro d'étudiant, nom, matière, note)

Réponse


1 SELECT DISTINCT a.stuid, a.name, a.subject, a.score FROM stuscore a
2 JOIN (
3     SELECT subject, MAX(score) max_score FROM stuscore GROUP BY subject
4 )b ON a.subject=b.subject5 WHERE a.score=b.max_score
Copier après la connexion

6 . deux étudiants ayant les meilleurs scores dans chaque cours (champs d'affichage obligatoires : numéro d'étudiant, nom, matière, note)

Réponse

1 SELECT a.stuid, a.name, a.subject, a.score FROM stuscore a
2 WHERE (
3     SELECT COUNT(1) FROM stuscore b
4     WHERE a.subject=b.subject AND b.score>=a.score
5 ) <= 2
6 ORDER BY a.subject ASC, a.score DESC
Copier après la connexion

Les statistiques sont les suivantes :

< td valign="top" width="53">

Score total

< / tr>

学号

姓名

语文

数学

英语

总分

平均分

ID étudiant

< / td>

Nom

Langue

Mathématiques

Anglais
1 SELECT stuid 学号, NAME 姓名,
2     SUM(CASE WHEN SUBJECT=&#39;语文&#39; THEN score ELSE 0 END) 语文,
3     SUM(CASE WHEN SUBJECT=&#39;数学&#39; THEN score ELSE 0 END) 数学,
4     SUM(CASE WHEN SUBJECT=&#39;英语&#39; THEN score ELSE 0 END) 英语,
5     SUM(score) 总分, (SUM(score)/COUNT(1)) 平均分
6 FROM stuscore GROUP BY 学号
Copier après la connexion

Score moyen

1 SELECT SUBJECT, AVG(score) avg_score FROM stuscore GROUP BY SUBJECT
Copier après la connexion

1 SELECT a.*, @var:=@var+1 rank 
2 FROM(
3     SELECT stuid, NAME, score FROM stuscore 
4     WHERE SUBJECT=&#39;数学&#39; ORDER BY score DESC
5 )a, (SELECT @var:=0)b
Copier après la connexion


1 SELECT b.* FROM(
2     SELECT a.* FROM(
3         SELECT stuid, NAME, score FROM stuscore 
4         WHERE SUBJECT=&#39;数学&#39; ORDER BY score DESC 
5         LIMIT 3
6     )a ORDER BY score ASC LIMIT 2
7 )b ORDER BY score DESC
8 
9 #注:当数学成绩只有2条以下数据时,此方法失效!
Copier après la connexion


1 SELECT a.*, @var:=@var+1 rank 
2 FROM(
3     SELECT stuid, NAME, score FROM stuscore 
4     WHERE SUBJECT=&#39;数学&#39; ORDER BY score DESC5 )a, (SELECT @var:=0)b
6 WHERE a.name=&#39;李四&#39;
Copier après la connexion


Réponse

课程

不及格(0-59)个

良(60-80)个

优(81-100)个

8. Lister les notes moyennes de chaque cours (champs d'affichage obligatoires : cours, note moyenne)

Réponse

9. Lister le classement des scores en mathématiques (champs d'affichage obligatoires : numéro d'élève, nom, notes, classement)

1 SELECT a.subject 课程,
2     (SELECT COUNT(1) FROM stuscore WHERE score<60 AND SUBJECT=a.subject)不及格,
3     (SELECT COUNT(1) FROM stuscore WHERE score BETWEEN 60 AND 80 AND SUBJECT=a.subject)良,
4     (SELECT COUNT(1) FROM stuscore WHERE score>80 AND SUBJECT=a.subject)优
5 FROM stuscore a GROUP BY SUBJECT
Copier après la connexion
Réponse10. Répertoriez les élèves avec des résultats en mathématiques à la 2-3ème place (champs d'affichage obligatoires : numéro d'élève, nom, matière, note) Réponses11. Retrouvez le classement des résultats en mathématiques de John DoeRéponse12. Les statistiques sont les suivantes : tr >
Cours Échecs (0-59) Bons (60-80) pièces Excellents (81-100) pièces
td >
Réponse

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal