由于计数,db2/sql 查询不允许从连接中选择静态值

Posted

技术标签:

【中文标题】由于计数,db2/sql 查询不允许从连接中选择静态值【英文标题】:db2/sql query won't allow to select static value from join due to counts 【发布时间】:2018-09-26 22:14:35 【问题描述】:

我试图弄清楚如何绕过我当前使用的 DB2 查询的问题。

这个查询:

SELECT
    count(*) as sales_180,
    180/count(*) as velocity

  FROM orders
        WHERE customerID= :cust_ID
        AND itemNum= :item

工作正常并返回我想要的两个值。但是,我正在尝试对另一个表上的 customerID 进行内部联接以获取与其相关的信息。

由于其他值是基于记录数的,它不会让我从其他表中选择静态值。

SELECT
    count(*) as sales_180,
    180/count(*) as velocity
    c.customerCompany

  FROM orders o
      inner join customers c
         on o.customerID = c.customerID

  WHERE customerID= :cust_ID
  AND itemNum= :item

这告诉我它不会让我选择值 c.customerCompany,因为第一个值是基于计数的。

有没有办法绕过这个来选择 c.customerCompany?我仍然想要计数,但我基本上想说“对于这个客户,得到他们的公司”

【问题讨论】:

能否包含来自 Db2 的确切错误消息?你在velocity 后面少了一个逗号,我想知道你是否需要一个GROUP BY customerID 对不起,这是一个错字,但我的查询确实有逗号。错误是:列 c.customerCompany 或 SELECT 列表中的表达式无效。 【参考方案1】:

您的查询中有一些问题。

    当您使用聚合函数 (count,sum,...) 时,您必须在 group by 中添加非聚合列。 您的customerID 需要使用c.customerIDo.customerID 否则,这两个表中有两个列名称customerID,会让DB 引擎感到困惑。

所以你可以试试这个。

SELECT
    count(*) as sales_180,
    180/count(*) as velocity,
    c.customerCompany
FROM orders o
  inner join customers c
     on o.customerID = c.customerID
WHERE c.customerID= :cust_ID AND itemNum= :item
GROUP BY c.customerCompany

注意

我建议你使用表示为查询指定的列是明确指定的

【讨论】:

以上是关于由于计数,db2/sql 查询不允许从连接中选择静态值的主要内容,如果未能解决你的问题,请参考以下文章

Db2/sql:使用连接选择和更新最旧的条目

使用 Worklight 6.1.0 触发选择查询时出现 DB2 SQL 错误?

【DB2】SQL优化

SQL0668N 原因码为 1 ,所以不允许操作 SQLSTATE 57016 ORACLE一次失败的导入到DB2

DB2 SQL 比 SUM+CASE 更好的方法来获取基于 ID 的唯一值计数

选择具有连接计数记录的不同记录