【问题标题】:Joining tables + SUM & GROUP BY function连接表 + SUM 和 GROUP BY 函数
【发布时间】:2017-05-02 12:30:25
【问题描述】:

我正在努力将表格与 SUM 和 GROUP BY 函数连接在一起。下面的查询工作正常:

select ID, sum(amount)
from table1
group by ID
having sum(amount) between 1000 and 10000

由于 table1 仅包含客户 ID,因此我还需要加入包含客户名称(名称列)的表 CUSTOMERS。以下查询将不再适用于我:

select ID, name, sum(amount)
from table1
left join customers on table1.ID = customers.ID2
group by ID
having sum(amount) between 1000 and 10000

放弃SUMGROUP BY 功能确实“解决”了这个问题,因为列名称也将在结果中可用,但是我仍然需要根据 ID 对 AMOUNT 进行求和和分组。在这种情况下,我应该如何加入另一个表以同时显示表 CUSTOMERS 中的字段 NAME?

SELECT 列表中的列名或表达式无效'

当前作为错误消息给出。

【问题讨论】:

  • 一般的 GROUP BY 规则说:如果指定了 GROUP BY 子句,则 SELECT 列表中的每个列引用必须要么标识一个分组列,要么是一个集合函数的参数!
  • 添加一些示例表数据和预期的结果!
  • 您使用的是哪个 DBMS?后格雷斯?甲骨文?

标签: sql


【解决方案1】:

需要在group by:

select t1.ID, c.name, sum(t1.amount)
from table1 t1 left join
     customers c
     on t1.ID = c.ID2
group by t1.ID, c.name;

注意表别名的使用。

【讨论】:

    【解决方案2】:

    在 group by 子句中添加“名称”

    select table1.ID, customers.name, sum(table1.amount) amount
    from table1,customers on table1.ID = customers.ID2
    group by table1.ID,customers.name
    

    【讨论】:

      【解决方案3】:

      试试看

      select t.ID, c.name, sum(t.amount)
      from table1 t
      left join customers c on table1.ID = customers.ID2
      group by t.ID, c.name
      having sum(t.amount) between 1000 and 10000
      

      或没有取决于您的要求

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多