【问题标题】:Adding other columns into a join with a group by将其他列添加到与组的联接中
【发布时间】:2012-06-10 18:11:47
【问题描述】:

在 Oracle 11g Express 中,我有以下查询:

select t1.product_name, SUM(t1.product_cost_per_month)
FROM table1 t1 INNER JOIN table2 t2 on (t1.product_name = t2.product_name)
WHERE t2.date > sysdate
GROUP BY t1.product_name

这可行,它返回每月产品成本的总和,在某个日期之后按产品分组(我这里只是使用 sysdate 作为示例)。

但是,我想显示一些关于每个产品的附加描述,即供应商。所以我使用这个代码:

select t1.product_name, SUM(t1.product_cost_per_month), t2.vendor
FROM table1 t1 INNER JOIN table2 t2 ON (t1.product_name = t2.product_name)
WHERE t2.date > sysdate
GROUP BY t1.product_name

这不起作用,因为所有变量都需要应用聚合函数才能使用“分组依据”,但是对于“供应商”之类的聚合函数似乎没有意义......那么有没有办法做到这一点?

我可能会编写一个简短的 pl/sql 例程来解决,但我想知道是否有一种纯 SQL 方法来解决这个问题?

【问题讨论】:

    标签: sql oracle join group-by oracle11g


    【解决方案1】:

    供应商也应包含在 GROUP BY 子句中。

    GROUP BY t1.product_name, t2.vendor
    

    实现您正在做的事情的另一种技术是嵌套查询:

    SELECT t1.product_name,
        (
            select sum(product_cost_per_month) 
             from table2 t2 
             where 
                t1.product_name = t2.product_name 
                and t2.date > sysdate
        ) as total_product_cost,
        t1.another_field,
        t1.another_field2,
        t1.another_field3
    FROM table1
    

    (对任何错误深表歉意,我没有对此进行测试,但这应该可以为您提供要点)

    【讨论】:

    • 谢谢这确实有效......但是(现在这更像是一个理论问题):也许我想要包括的另一位描述是总购买成本。将某物的总购买成本“分组”有意义吗?
    • 在那种情况下,它不会是一个聚合吗? SUM(purchase_cost) 或类似的东西?
    • 太好了,我刚刚开始学习嵌套查询,但这正是我所寻找的。谢谢。
    • 我的声望不够... :((只剩下两点)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 2015-08-13
    • 1970-01-01
    • 2021-08-12
    相关资源
    最近更新 更多