This Go blog post discusses the history and reasons behind the Go team's decision to stop pursuing syntactic language changes for error handling.Go 语言的错误处理,与众不同,报错会单独返回一个值,这导致代码冗余。多年来,使用者一直要求有更好的写法,Go 团队想了很多办法,效果都不好。现在,官方终于宣布,不再寻求更好的写法,保持现状。
NLWeb creates a standard protocol that turns any website into a conversational interface that both humans and AI agents can query naturally. It leverages Schema.org structured data and includes built-in support for MCP.NLWeb 是微软新提出的一个接口协议,类似于 MCP 协议,是网站跟 AI 大模型的对话协议,方便大模型从网站获取数据。本文是这个协议的简介。
PARTITION BY column1, column2, ...: (可选) 将结果集分成多个分区。 RANK() 函数将在每个分区内独立计算排名。 如果没有指定 PARTITION BY 子句,则整个结果集被视为一个分区。
ORDER BY column3 [ASC | DESC], column4 [ASC | DESC], ...: 指定每个分区内数据的排序方式。 RANK() 函数基于此排序来计算排名。 ASC 表示升序(默认),DESC 表示降序。
RANK() 函数的工作原理:
RANK() 函数会为每个分区(或整个结果集,如果没有 PARTITION BY 子句)中的每一行分配一个排名。 排名是基于 ORDER BY 子句指定的排序顺序计算的。 如果有多行具有相同的排序值,它们将获得相同的排名,并且下一个排名将会跳过相同的数量。
示例:
假设我们有一个名为 employees 的表,包含以下数据:
employee_id
employee_name
department
salary
1
Alice
Sales
60000
2
Bob
Sales
70000
3
Charlie
Marketing
55000
4
David
Marketing
55000
5
Eve
Sales
70000
6
Frank
Marketing
80000
1. 计算所有员工的薪水排名:
1 2 3 4 5 6 7
SELECT employee_id, employee_name, salary, RANK() OVER (ORDERBY salary DESC) AS salary_rank FROM employees;
结果:
employee_id
employee_name
salary
salary_rank
6
Frank
80000
1
2
Bob
70000
2
5
Eve
70000
2
1
Alice
60000
4
3
Charlie
55000
5
4
David
55000
5
注意:Bob 和 Eve 具有相同的薪水,因此它们都获得了排名 2。下一个排名是 4,跳过了 3。 Charlie和David工资相同,排名也相同,下一个排名是6.
2. 计算每个部门内员工的薪水排名:
1 2 3 4 5 6 7
SELECT employee_id, employee_name, department, RANK() OVER (PARTITIONBY department ORDERBY salary DESC) AS department_salary_rank FROM employees;
结果:
employee_id
employee_name
department
salary
department_salary_rank
6
Frank
Marketing
80000
1
3
Charlie
Marketing
55000
2
4
David
Marketing
55000
2
2
Bob
Sales
70000
1
5
Eve
Sales
70000
1
1
Alice
Sales
60000
3
注意: PARTITION BY department 子句将员工分成 Sales 和 Marketing 两个分区。 RANK() 函数分别在每个分区内计算薪水排名。 Bob 和 Eve 在 Sales 部门内具有相同的薪水,因此都获得了排名 1。 Charlie和David在Marketing部门内工资相同,因此都获得排名2.