面試筆試常考的MySQL資料庫操作group by

來源:互聯網
上載者:User

面試筆試常考的MySQL資料庫操作group by

IT 面試中,資料庫的相關問題基本上屬於必考問題,而其中關於sql語句也是經常考察的一個重要知識點。

下面介紹下sql語句中一個比較重要的操作group by,他的重要行一方面體現在他的理解困難度,一方面體現應用中的長見性。

--------------------------------------分割線 --------------------------------------

Ubuntu 14.04下安裝MySQL

《MySQL權威指南(原書第2版)》清晰中文掃描版 PDF

Ubuntu 14.04 LTS 安裝 LNMP Nginx\PHP5 (PHP-FPM)\MySQL

Ubuntu 14.04下搭建MySQL主從伺服器

Ubuntu 12.04 LTS 構建高可用分布式 MySQL 叢集

Ubuntu 12.04下原始碼安裝MySQL5.6以及Python-MySQLdb

MySQL-5.5.38通用二進位安裝

--------------------------------------分割線 --------------------------------------

首先,給出一個studnet學生表:

 CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) DEFAULT NULL,
  `sex` tinyint(1) DEFAULT '0',
  `score` int(10) NOT NULL,
  `dept` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8

添加一些測試資料:

mysql> select * from student where id<10;
+----+------+------+-------+---------+
| id | name | sex  | score | dept    |
+----+------+------+-------+---------+
|  1 | a    |    1 |    90 | dev    |
|  2 | b    |    1 |    90 | dev    |
|  3 | b    |    0 |    88 | design  |
|  4 | c    |    0 |    60 | sales  |
|  5 | c    |    0 |    89 | sales  |
|  6 | d    |    1 |  100 | product |
+----+------+------+-------+---------+

給出需求,寫出sql:

給出各個部門最高學生的分數。

要想得到各個部門學生,首先就要分組,按照部門把他們分組,然後在各個部門中找到分數最高的就可以了。

所以sql語句為:

mysql> select *, max(score) as max  from student group by dept order by name;
+----+------+------+-------+---------+------+
| id | name | sex  | score | dept    | max  |
+----+------+------+-------+---------+------+
|  1 | a    |    1 |    90 | dev    |  90 |
|  3 | b    |    0 |    88 | design  |  88 |
|  4 | c    |    0 |    60 | sales  |  89 |
|  6 | d    |    1 |  100 | product |  100 |
+----+------+------+-------+---------+------+
4 rows in set (0.00 sec)

這隻是個簡單的例子,我們可以再把這個例子複雜化,比如分數最高的必須是女生,即sex列值必須為1才挑選出,這時的sql語句應該為:

mysql> select *,max(score) as max from student group by dept having sex='1' order by name;
+----+------+------+-------+---------+------+
| id | name | sex  | score | dept    | max  |
+----+------+------+-------+---------+------+
|  1 | a    |    1 |    90 | dev    |  90 |
|  6 | d    |    1 |  100 | product |  100 |
+----+------+------+-------+---------+------+
2 rows in set (0.46 sec)

這裡我們沒有用where語句而是用了having,這裡簡單說明一下,因為我們的條件是在分組後進行的,其實分組前挑選出sex='1',然後再按照dept部門分組,也是可行的,這裡就要看題目是怎麼要求的:

mysql> select *,max(score) as max from student where sex='1' group by dept order by name;
+----+------+------+-------+---------+------+
| id | name | sex  | score | dept    | max  |
+----+------+------+-------+---------+------+
|  1 | a    |    1 |    90 | dev    |  90 |
|  6 | d    |    1 |  100 | product |  100 |
+----+------+------+-------+---------+------+
2 rows in set (0.05 sec)

更多詳情見請繼續閱讀下一頁的精彩內容:

  • 1
  • 2
  • 下一頁

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.