You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过SQL查询获取密度字段的所有最小值记录?

实现仅保留密度最小值记录的简便方法

你的原查询是按金属名称分组获取每组的最小密度,但现在需要筛选出全局密度最小的所有记录,以下是两种简便的实现方式:

方法一:子查询获取全局最小密度

先通过子查询算出所有关联数据中的最小密度,再在外层筛选密度等于该值的记录:

SELECT m.density, m.metal_name
FROM metal m
INNER JOIN storage s ON m.id = s.metal_id
WHERE m.density = (
    SELECT MIN(m2.density)
    FROM metal m2
    INNER JOIN storage s2 ON m2.id = s2.metal_id
)
GROUP BY m.metal_name, m.density;

注:如果同一金属对应多条相同密度的记录,GROUP BY用于去重;如果数据本身不会重复,可以去掉GROUP BY。

方法二:窗口函数(适用于MySQL 8+、PostgreSQL等支持窗口函数的数据库)

用窗口函数直接计算全局最小密度,或者通过排名筛选最小值记录,写法更灵活:

方式A:直接匹配全局最小密度

WITH ranked_metals AS (
    SELECT 
        m.density, 
        m.metal_name,
        MIN(m.density) OVER () AS global_min_density
    FROM metal m
    INNER JOIN storage s ON m.id = s.metal_id
    GROUP BY m.metal_name, m.density
)
SELECT density, metal_name
FROM ranked_metals
WHERE density = global_min_density;

方式B:通过排名筛选

SELECT density, metal_name
FROM (
    SELECT 
        m.density, 
        m.metal_name,
        RANK() OVER (ORDER BY m.density) AS rnk
    FROM metal m
    INNER JOIN storage s ON m.id = s.metal_id
    GROUP BY m.metal_name, m.density
) t
WHERE rnk = 1;

这种方式用RANK()给记录按密度排序,密度最小的记录排名为1,筛选排名1的即可保留所有最小值记录。

内容的提问来源于stack exchange,提问作者Qmails

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 12:48:24