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

如何基于列最大值筛选每个物品的最高使用占比对应数据行?

解决方案

假设你的表名为item_usage,以下几种方法可以实现你要的需求:

方法1:窗口函数(推荐,支持SQL 2008+或现代数据库如MySQL8+/PostgreSQL/SQL Server)

利用ROW_NUMBER()窗口函数分组排序,直接提取每组的最高占比行:

WITH ranked_data AS (
    SELECT 
        Item,
        Usage,
        Customer,
        -- 按Item分组,Usage降序编号,每组第一行为1
        ROW_NUMBER() OVER (PARTITION BY Item ORDER BY Usage DESC) AS row_rank
    FROM item_usage
)
SELECT Item, Usage, Customer
FROM ranked_data
WHERE row_rank = 1;

说明:如果存在多个客户对同一物品的使用占比并列最高,ROW_NUMBER()只会返回其中一行;若要保留所有并列行,可替换为RANK()或DENSE_RANK()。

方法2:子查询关联(兼容旧版数据库)

先查询每个物品的最高占比,再关联原表获取对应客户信息:

SELECT main.Item, main.Usage, main.Customer
FROM item_usage main
INNER JOIN (
    -- 先得到每个物品的最大使用占比
    SELECT Item, MAX(Usage) AS max_usage
    FROM item_usage
    GROUP BY Item
) max_data 
ON main.Item = max_data.Item AND main.Usage = max_data.max_usage;

说明:此方法会返回所有并列最高的行(如果存在)。

方法3:关联子查询筛选

通过子查询直接匹配每行对应的物品最高占比:

SELECT Item, Usage, Customer
FROM item_usage current_row
WHERE Usage = (
    SELECT MAX(Usage)
    FROM item_usage
    WHERE Item = current_row.Item
);

说明:效果与方法2一致,会保留所有并列最高的行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:35:23