嗨, 大家好: 网站在新年后正式开通,欢迎大家加入我们,共同维护一个良好氛围的中国技术社区。 欢迎举报不良帖子,欢迎提供建议。
我们的QQ群:136102234,欢迎进群找答案,里边会有很多资深的大师们。 point overflow

刚开始很多人可能分不清二者的区别。

但是有点英文功底的大概能分出来group 和order分别是组和顺序的意思,也就是说:

group by 代表的是按照某个字段或者条件分组 order by 代表是按照某个字段或者条件排序

asked 2016-03-24 10:42:04

jkant's gravatar image

jkant ♦♦
11135138139
accept rate: 3%


分组,也就是说按照一定的字段或者条件,把这些字段或者条件相同的数据分为唯一的一个组,剩余的数据可以通过聚合函数count,sum,avg,max,group_concat等聚合起来,达到我们需要的目的;

排序,按字面意思也就是需要按照什么样的顺序来显示数据。

以下是案例: -- 建表 CREATE TABLE employees ( emp_no int(11) NOT NULL, birth_date date NOT NULL, first_name varchar(14) NOT NULL, last_name varchar(16) NOT NULL, gender enum('M','F') NOT NULL comment '性别', hire_date date NOT NULL comment '雇佣日期', PRIMARY KEY (emp_no) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 插入数据 INSERT INTO employees VALUES (10001, '1953-9-2', 'Georgi', 'Facello', 'M', '1986-6-26'); INSERT INTO employees VALUES (10002, '1964-6-2', 'Bezalel', 'Simmel', 'F', '1985-11-21'); INSERT INTO employees VALUES (10003, '1959-12-3', 'Parto', 'Bamford', 'M', '1986-8-28'); INSERT INTO employees VALUES (10004, '1954-5-1', 'Chirstian', 'Koblick', 'M', '1986-12-1'); INSERT INTO employees VALUES (10005, '1955-1-21', 'Kyoichi', 'Maliniak', 'M', '1989-9-12'); INSERT INTO employees VALUES (10006, '1953-4-20', 'Anneke', 'Preusig', 'F', '1989-6-2'); INSERT INTO employees VALUES (10007, '1957-5-23', 'Tzvetan', 'Zielinski', 'F', '1989-2-10'); INSERT INTO employees VALUES (10008, '1958-2-19', 'Saniya', 'Kalloufi', 'M', '1994-9-15'); INSERT INTO employees VALUES (10009, '1952-4-19', 'Sumant', 'Peac', 'F', '1985-2-18'); INSERT INTO employees VALUES (10010, '1963-6-1', 'Duangkaew', 'Piveteau', 'F', '1989-8-24');

-- 比如我们有个需求是统计男女比例的

分析可知:肯定要得到男,女的数量,然后再做比例计算.
一种方式是分别求数量,然后最后做计算:
select count() from employees where gender='F'
select count(
) from employees where gender='M'

但是这样就比较麻烦,如果性别有N种怎么办? 所以这时候就需要对性别做分组:

select gender,count(*) from employees group by gender

就达到了我们需要的效果

另外,需要注意的是:group by 自带了排序 ,我们也可以这么用:group by gender desc 或者group by gender asc(默认)

-- 另外可能我们需要查出来最近入职的职员20个,然后需要对他们培训。

分析,最近入职,也就是说,需要展现的数据是按照入职时间倒叙排列的。

那么order by就入场了

select * from employees order by hire_date desc limit 20

说明:desc倒叙,asc正序

另外需要注意的是:order by 在同一个select里边,会在group by 之后,limit 之前,顺序按照之前提过的。

link

answered 2016-03-24 11:05:34

jkant's gravatar image

jkant ♦♦
11135138139
accept rate: 3%

Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "Title")
  • image?![alt text](/path/img.jpg "Title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Tags:

×72
×7
×1
×1

Asked: 2016-03-24 10:42:04

Seen: 1,531 times

Last updated: 2016-03-24 11:05:34