MySQLでの集約関数

5824 ワード

  student 
CREATE TABLE IF NOT EXISTS `student` (
  `id` int(4) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(12) NOT NULL,
  `sex` enum(' ',' ') NOT NULL DEFAULT ' ',
  `age` tinyint(4) NOT NULL DEFAULT '24',
  `edu` enum('  ','  ','  ','  ','   ') NOT NULL DEFAULT '  ',
  `salary` float(8,2) unsigned NOT NULL DEFAULT '0.00',
  `bonus` float(6,2) unsigned NOT NULL DEFAULT '0.00',
  `city` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=55 ;

  
      
INSERT INTO `student` (`id`, `name`, `sex`, `age`, `edu`, `salary`, `bonus`, `city`) VALUES
(1, '    ', ' ', 24, '  ', 5000.00, 1200.00, '   '),
(2, '   ', ' ', 24, '  ', 750.00, 700.00, '   '),
(3, 'TFboy', ' ', 28, '  ', 8000.00, 800.00, '   '),
(4, '  ', ' ', 25, '  ', 4000.00, 800.00, '   '),
(5, 'AnglaBaby', ' ', 21, '  ', 6000.00, 2800.00, '   '),
(6, '  ', ' ', 24, '  ', 12300.00, 1580.00, '   '),
(7, '   ', ' ', 23, '  ', 2000.00, 530.00, '   '),
(8, '   ', ' ', 24, '  ', 8900.00, 550.00, '   '),
(9, '  ', ' ', 30, '   ', 24000.00, 8500.00, '    '),
(11, '   ', ' ', 34, '  ', 9500.00, 1200.00, '   '),
(12, '  ', ' ', 29, '  ', 2000.00, 1400.00, '   '),
(13, '  ', ' ', 24, '  ', 2000.00, 1400.00, '   '),
(14, '   ', ' ', 24, '  ', 2000.00, 1400.00, '   '),
(15, '  ', ' ', 24, '  ', 2000.00, 1400.00, '   '),
(16, '   ', ' ', 35, '  ', 14000.00, 840.00, '   '),
(17, '   ', ' ', 35, '  ', 14000.00, 840.00, '   '),
(18, '   ', ' ', 37, '  ', 18000.00, 1440.00, '   '),
(19, '   ', ' ', 26, '  ', 8900.00, 1280.00, '   '),
(20, '   ', ' ', 27, '  ', 14900.00, 2800.00, '   '),
(21, '    ', ' ', 35, '  ', 23000.00, 3900.00, '   '),
(22, '  ', ' ', 24, '   ', 2800.00, 1200.00, '   '),
(23, '  ', ' ', 38, '   ', 7800.00, 1220.00, '   '),
(24, '  ', ' ', 33, '   ', 8800.00, 1320.00, '   '),
(25, '  ', ' ', 39, '   ', 18800.00, 2320.00, '   '),
(26, '   ', ' ', 25, '  ', 9400.00, 589.00, '   '),
(27, '   ', ' ', 26, '  ', 7000.00, 520.00, '   '),
(28, '   ', ' ', 27, '  ', 6800.00, 580.00, '   '),
(29, '   ', ' ', 24, '  ', 58000.00, 2500.00, '   '),
(30, '  ', ' ', 35, '  ', 38000.00, 1700.00, '   '),
(31, '   ', ' ', 24, '  ', 28000.00, 2700.00, '   '),
(32, '   ', ' ', 29, '  ', 18000.00, 3000.00, '   '),
(46, '    ', ' ', 24, '  ', 5000.00, 1200.00, '   '),
(34, '   ', ' ', 24, '  ', 3000.00, 3700.00, '   '),
(45, '    ', ' ', 24, '  ', 5000.00, 700.00, NULL),
(37, 'Mary', ' ', 29, '  ', 3000.00, 700.00, '   '),
(38, 'Kate', ' ', 29, '  ', 3000.00, 700.00, '   '),
(36, ' ', ' ', 29, '  ', 3000.00, 800.00, '   '),
(39, '   ', ' ', 35, '  ', 7800.00, 956.00, '   '),
(40, '   ', ' ', 39, '  ', 6700.00, 800.00, '   '),
(41, '  ', ' ', 28, '  ', 8970.00, 845.00, '   '),
(42, '   ', ' ', 28, '  ', 23400.00, 2900.00, '   '),
(43, '  ', ' ', 30, '   ', 24000.00, 8500.00, '    '),
(47, '    ', ' ', 24, '  ', 5000.00, 1200.00, '   '),
(48, 'AnglaBaby', ' ', 24, '   ', 6000.00, 2800.00, '   '),
(49, 'AnglaBaby', ' ', 24, '   ', 6000.00, 2800.00, '   '),
(50, 'AnglaBaby', ' ', 24, '   ', 6000.00, 2800.00, '   '),
(52, '  ', ' ', 24, '  ', 0.00, 500.00, NULL); 

1.定義:SQLの集約関数は、値のセットを計算し、単一の値を返します.
2.主に:
AVg():指定したグループの平均値を返します.
count():指定したグループ内のアイテムの合計数を返します.
max():指定したグループのデータの最大値を返します.
min():指定したグループのデータの最小値を返す
sum():指定したグループのデータと
3.使用シーン:集約関数はselect文のgroupby句とよく使用されます
例:最も給料の高い学生の情報を検索する
分析:まず給与が最も高い値を検出し、その値が最も高いことを条件に対応する学生情報を検索する.
第一歩:select max(salary)as最高賃金from student;
ステップ2:select*from student where salary=(select max(salary)as最高賃金from student);
例:学生の最高賃金、最低賃金、平均賃金、賃金合計を調べる
select max(salary)最高賃金、min(salary)最低賃金、avg(salary)平均賃金、sum(salary)賃金総和from student;
例:合計都市数の統計
    select count(city) from student;
4.構文:selectフィールドリストfromテーブル名[where句]groupby句;
例:student表の男子学生と女子学生が何人いるかを調べる
分析:まずsexグループによって、男子学生は全部でいくらで、女子学生は全部でいくらで、最後に統計すればいいです;すなわち、統計総数にグループ化される.
文:select sex,count(*)総数from student group by sex;
複数のフィールドを同時にグループ化できます.
例えば、同じ都市の男子学生と女子学生の平均賃金を調べる
分析:cityとsexを同時にグループ化し、男女の平均賃金を統計する必要がある.
文:select city,sex,avg(salary)from student group by city,sex;
転載先:https://www.cnblogs.com/Worssmagee1002/p/7672633.html