问题:表t有三个字段,student(学生姓名),class(科目),score(成绩),需要找到总成绩最高的学生的姓名
(可能有多个)
一开始的做法:
select student,sum(score) from t group by student having sum(score) =
(select temp.s from
(select student,sum(score) s from t group by student order by s desc limit 1) as temp)
思路是先分组求和,然后对和最大的值取出来,当分组求和的列表的一个值等于最大的值,则取出这条记录。但是group by了两次,想当不爽。
后面找到了rank函数,于是有了这个写法
select * from (
with tmp as(
select student,sum(score) as sum_score from student group by student )
select rank() OVER ( order by tmp.sum_score desc) as cc,* from tmp) as tc where tc.cc = 1
把分组求和做成一个临时视图tmp,然后找出临时视图rank over排序后的排序为1的记录。
rank over函数在pg,mssql,oracle中都可用,在mysql中不能用
分享到:
相关推荐
使用Linq语法与Lambda表达式分组取泛型数组某列的最小值/最大值
表:t_test -------------------------------------- id(int) cost(int) des Autoid(id) -------------------------------------- 1 10 aaaa 1 1 15 bbbb 2 1 20 cccc 3 ...取每一类id中cost最大的纪录
Java8 Stream 自定义分组求和并排序的实现 Java8 Stream 自定义分组求和并排序的实现是 Java8 中一个非常重要的知识点,该知识点的实现可以帮助开发者快速地实现分组求和并排序的操作,从而提高开发效率和代码质量...
在Java应用中,Aviator 特别适合用于数据分析和处理,例如对 List 中的数据进行求和、排序、找出最大值和最小值等操作。在给定的“aviator 实现 List 的求和、排序、最大、最小值”的主题中,我们将深入探讨如何利用...
- 分组后求最大值或最小值: ```sql SELECT 分组字段, MAX(日期字段) FROM 表 GROUP BY 分组字段 ``` - 获取分组内的第一条或最后一条记录: - SQL Server中,可以使用`ROW_NUMBER()`配合`OVER`子句: ```...
这两个函数分别用于找出指定列的最大值和最小值。例如,找到最高温度和最低温度: ```sql SELECT MAX(temperature) AS max_temp, MIN(temperature) AS min_temp FROM weather_data; ``` 5. **GROUP BY** 语句 ...
用sql语言完成包括计算列、求和、最大、最小值、各类选择条件、字符匹配、分组和排序,连接查询、嵌套查询及EXISTS查询等,体会各种查询的异同及相互之间的转换,体会各种查询的执行过程,为简单综合应用打下良好的...
`OVER()`函数在这里可以配合聚合函数,比如`MAX()`,在每个产品类型分组内计算最大价格,然后直接筛选出价格等于分组最大价格的记录。 ```sql WITH cte AS ( SELECT *, MAX(Price) OVER(PARTITION BY ProductType)...
1. **聚合函数**:如`COUNT()`计算行数,`SUM()`求和,`AVG()`计算平均值,`MAX()`和`MIN()`找出最大值或最小值。 2. **字符串函数**:如`CONCAT()`连接字符串,`SUBSTRING()`截取字符串,`LOWER()`和`UPPER()`转换...
5. 聚合函数:SUM求和,AVG求平均值,COUNT计算数量,MAX和MIN找最大值和最小值。 6. 连接(JOIN)操作:INNER JOIN返回两个表的交集,LEFT JOIN返回左表所有记录及右表匹配的记录,RIGHT JOIN反之,FULL JOIN返回两...
- **汇总函数**:用于对一组值进行统计计算,如COUNT(计数)、SUM(求和)、AVG(平均值)、MAX(最大值)、MIN(最小值)等。 - **日期/时间函数**:用于处理日期和时间值,如ADD_MONTHS(增加月份)、LAST_DAY...
- `MAX()`:找出查询字段的最大值 - `MIN()`:找出查询字段的最小值 2. Sequelize中的分组查询 在Sequelize中,我们可以利用内置的聚合函数来实现类似的分组查询。例如: - `aggregate(field, ...
例如,如果你想查看每个客户购买每种产品的总数量,你需要连接`Customers`、`Products`、`Orders`和`[Order Details]`四张表,并按照`CompanyName`和`ProductName`分组,同时对`Quantity`列求和,查询语句如下: ...
2. **聚合函数**:SUM、AVG、MAX、MIN和COUNT等聚合函数用于对一组值进行计算,例如求和、平均值、最大值、最小值和计数。 3. **联接操作**:INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN用于合并多个表的数据,...
例如,AVG用于计算平均值,MAX和MIN用于找出最大值和最小值,SUM用于求和,COUNT则计算记录数量。这些函数都是针对每个分组执行的,而不是整个数据集。 在使用`GROUP BY`时,需要注意的是,非分组字段的选取必须...
- **最大值**: `SELECT MAX(field) AS max_value FROM table_name;` - **最小值**: `SELECT MIN(field) AS min_value FROM table_name;` ### 高级查询 #### 子查询 - **子查询可以在`WHERE`子句中使用**: ```...
作业可能涉及到使用这些函数来求和、求平均、找出最大值或最小值。 6. 连接查询:JOIN操作用于合并两个或更多表的数据。INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN是不同类型的连接,学生需要理解它们的区别,...
- MAX()和MIN()找出最大值和最小值 4. **子查询**(learn-sql-the-hard-waych12.html) - 内部子查询和外部子查询 - 使用IN、NOT IN、ANY、ALL操作符 - 作为FROM子句的子查询 - 使用子查询进行多表操作 5. **...
2. **聚合函数**:如SUM、AVG、COUNT、MAX和MIN等,这些函数用于对一组值进行计算,比如求和、平均值、最大值和最小值。 3. **子查询**:在主查询中嵌套的查询,用于提供其他查询所需的值或结果集。它可以作为...