ホームページ > データベース > mysql チュートリアル > SQL 統計を実装する mysql の例

SQL 統計を実装する mysql の例

黄舟
リリース: 2017-09-08 13:29:40
オリジナル
1824 人が閲覧しました

テーブルステートメント

/*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');

建表语句
ログイン後にコピー

質問:

1.各人の合計スコアと順位を計算します(必須フィールド:名前、合計スコア)

答え


1 SELECT a.name, SUM(score) sum_score FROM stuscore a
2 GROUP BY a.name ORDER BY sum_score DESC
ログイン後にコピー

2.全員の合計スコアと順位を計算します (必須表示フィールド: 生徒番号、名前、合計スコア)

答え


1 SELECT a.stuid, a.name, SUM(score) sum_score FROM stuscore a
2 GROUP BY a.name ORDER BY sum_score DESC
ログイン後にコピー

3. 1 つの科目での全員の最高スコアを計算します (必須表示フィールド: 生徒番号、名前)、コース、最高成績)

答え


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
ログイン後にコピー

4.各人の平均成績を計算します(必須表示フィールド:学生ID、名前、平均成績)

答え


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
ログイン後にコピー

5.列 各コースで最高のスコアを持つ学生 (必須フィールド: 学生番号、名前、科目、学年)

回答


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
ログイン後にコピー

6. 各コースで最高のスコアを持つ学生 2 人をリストします (必須)フィールド: 学生 ID、名前、科目、学年)

答え

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
ログイン後にコピー

7. 統計は次のとおりです:

学生ID

名前

中国語

数学

英語

合計点

平均点

答え

rreee

8.各コースの平均成績をリストします (必須表示フィールド: コース、平均成績)

答え

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 学号
ログイン後にコピー

9.数学の成績の順位を一覧表示します (必須表示フィールド: 生徒番号、名前、成績、順位)

答え

1 SELECT SUBJECT, AVG(score) avg_score FROM stuscore GROUP BY SUBJECT
ログイン後にコピー

10.数学で 2 ~ 3 位にランクされている生徒をリストしてください (必須表示フィールド: 生徒番号、名前、科目、学年)

答え

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
ログイン後にコピー

11. John Doe の数学のスコアのランキングを確認してください

答え

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条以下数据时,此方法失效!
ログイン後にコピー

12。統計は次のとおりです:

コース

失敗 (0-59)

良い (60-80)

優秀 (81-100)

答え

rree

以上がSQL 統計を実装する mysql の例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート