数据库之--count/distinct/group by的用法总结

一、 count、distinct、group by的用法:

1.count()函数是用来统计表中记录的一个函数,返回匹配条件的行数,不去重。

2.count()语法:

(1)count(*)—包括所有列,返回表中的记录数,相当于统计表的行数,在统计结果的时候,包含NULL的记录,且不去重。

(2)count(1)—第一列,1表示一个固定值,也可以用count(2)、count(3)代替,在统计结果的时候,包含NULL的记录。

(3)count(列名)—只包括列名指定列,返回指定列的非空的记录数,在统计结果的时候,不包含为NULL的记录。

(4)count(distinct 列名)—只包括列名指定列,返回指定列的不同值的记录数,即会去重,且不包含列值为NULL的记录。

  1. SELECT count(*) FROM 表名 WHERE 条件 // 这样查出来的是总记录条

SELECT id count(*)FROM 表名 WHERE 条件 GROUP BY id //这样统计的会是每组的记录条数,统计出来的是相同id值的计数情况。

SELECT id count(*) FROM 表名 WHERE 条件. 是错误的写法。

一般来说,一条select语句的执行顺序如下:**from子句→where→group by(having)→select→order by→limit,因为聚集函数是在select中的,所以是在执行完group by之后再执行count()函数
**Employee 表包含所有员工信息,每个员工有其对应的工号 Id,姓名 Name,工资 Salary 和部门编号 DepartmentId 。

| Id | Name | Salary | DepartmentId |
| 1 | Joe | 85000 | 1 |
| 2 | Henry | 80000 | 2 |
| 3 | Sam | 60000 | 2 |
| 4 | Max | 90000 | 1 |
| 5 | Janet | 69000 | 1 |
| 6 | Randy | 85000 | 1 |
| 7 | Will | 70000 | 1 |

Department 表包含公司所有部门的信息。
| Id | Name |
| 1 | IT |
| 2 | Sales |

编写一个 SQL 查询,找出每个部门获得前三高工资的所有员工。例如,根据上述给定的表,查询结果应返回:
| Department | Employee | Salary |
| IT | Max | 90000 |
| IT | Randy | 85000 |
| IT | Joe | 85000 |
| IT | Will | 70000 |
| Sales | Henry | 80000 |
| Sales | Sam | 60000 |

SELECT P2.Name AS Department,P3.Name AS Employee,P3.Salary AS Salary
FROM Employee AS P3
INNER JOIN Department AS P2
ON P2.Id = P3.DepartmentId
WHERE (
SELECT COUNT(DISTINCT Salary)
FROM Employee AS P4
WHERE P3.DepartmentId = P4.DepartmentId
AND P4.Salary >= P3.Salary
) <= 3
ORDER BY DepartmentId,Salary DESC

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值