sql - SQL - 字段有两个记录值,只想显示一个基于另一个字段中的总计的值,然后显示两个值的总计
问题描述
所以我试图创建一个前十名的列表,但是有些公司有 2 个 BUSTYPE 关联,我希望结果对这些值求和,同时只包括与较大值关联的 BUSTYPE
示例查询
SELECT TOP 10 ID, COMPANY, BUSTYPE, sum(value) as VALUES
FROM TABLE
GROUP BY ID, COMPANY, BUSTYPE
ORDER BY VALUES desc
相关输出表1:
ID COMPANY BUSTYPE VALUES
123 orange Large 1820
相关输出表2:
ID COMPANY BUSTYPE VALUES
123 orange Small 294
IDEAL TABLE End Result (2114 = 1820 + 294),较大的值与大型总线类型相关联,因此显示
ID COMPANY BUSTYPE VALUES
123 orange Large 2114
我的最终目标是创建一个我可以加入的表,默认为我的主表中的 BUSTYPE,所以我不必担心公司有 2 个 BUSTYPE
或找到一种方法对我的整个数据集执行此操作!
解决方案
您可以使用窗口函数:
SELECT TOP 10 ID, COMPANY,
MAX(CASE WHEN seqnum = 1 THEN BUSTYPE END) as BUSTYPE,
SUM(value) as VALUES
FROM (SELECT T.*,
ROW_NUMBER() OVER (PARTITION BY ID, COMPANY ORDER BY VALUE DESC) AS seqnum
FROM TABLE T
) T
GROUP BY ID, COMPANY
ORDER BY VALUES desc;
你也可以使用FIRST_VALUE()
这样你就不需要条件聚合:
SELECT TOP 10 ID, COMPANY, FIRST_BUSTYPE,
SUM(value) as VALUES
FROM (SELECT T.*,
FIRST_VALUE(BUSTYPE) OVER (PARTITION BY ID, COMPANY ORDER BY VALUE DESC) AS FIRST_BUSTYPE
FROM TABLE T
) T
GROUP BY ID, COMPANY, FIRST_BUSTYPE
ORDER BY VALUES desc
推荐阅读
- python - 如何使用matplotlib python创建3点的3d三角形
- javascript - 如何使用firebase云功能从firebase数据库中检索子节点的键值?
- c++ - 如何在公共类 C++ 中访问变量的值
- python - Pandas 根据多列中的值映射
- r - 如何计算多个表中的变量以生成新列?
- php - 如何正确配置 php - CENTOS 6
- java - Java 扫描器第二个输入以缩小搜索范围
- java - 如何使用 tempArray 将字符串分成两个双精度数?
- wordpress - admin-ajax.php 中的 Ajax 发布调用返回 0 和 400 错误请求(Wordpress)
- python - 如何在循环期间分配新变量?