ARGMIN_AGG
接受两个实参 target 和 arg,其中两者都是查询数据集中的列或列表达式。ARGMIN_AGG 在 target 中查找具有最小非 null 值的行,并返回该行中的 arg 值。如果多行包含最低 target 值,则 ARGMIN_AGG 将返回它找到的第一行中的 arg。使用 WITHIN GROUP ORDER BY 子句控制 ARGMMIN_AGG 先查找哪一行。
行为类型
不可变 — 如果 WITHIN GROUP ORDER BY 子句指定在组内解析为唯一值的一列或一组列;否则为 易变。
语法
ARGMIN_AGG ( target, arg ) [ within‑group‑order‑by‑clause ]
参数
- target, arg
- 查询数据集中的列。
- within‑group‑order‑by‑clause
- 对每组行中的目标值进行排序:
WITHIN GROUP (ORDER BY { column‑expression[ sort-qualifiers ] }[,...])
sort‑qualifiers:
{ ASC | DESC [ NULLS { FIRST | LAST | AUTO } ] }
此子句用于确定当多行包含最低目标值时返回哪一行;否则,结果可能会随着同一查询的每次迭代而变化。
提示
WITHIN GROUP ORDER BY 会消耗每个组的大量内存。为了最大限度地减少内存消耗,请创建支持 GROUPBY PIPELINED 的投影。
示例
以下示例在 WITH 子句中调用 ARGMIN_AGG,以查找每个地区所有员工中的最低工资,并返回最低工资员工的 ID。主要查询返回工资金额和员工姓名:
=> WITH msr (employee_region, emp_id) AS
(SELECT employee_region, argmin_agg(annual_salary, employee_key) lowest_paid_employee FROM employee_dim GROUP BY employee_region)
SELECT msr.employee_region, ed.annual_salary AS lowest_salary, ed.employee_first_name||' '||ed.employee_last_name AS employee_name
FROM msr JOIN employee_dim ed ON msr.emp_id = ed.employee_key ORDER BY annual_salary DESC;
employee_region | lowest_salary | employee_name
----------------------------------+---------------+-----------------
NorthWest | 20913 | Raja Garnett
SouthWest | 20750 | Seth Moore
West | 20443 | Midori Taylor
South | 20363 | David Bauer
East | 20306 | Craig Jefferson
MidWest | 20264 | Dean Vu
(6 rows)