【问题标题】:Count and group by in a referenced table, selecting other attributes在引用的表中计数和分组,选择其他属性
【发布时间】:2017-04-10 15:31:46
【问题描述】:

我有两个表:account_table 和 branch_table。

create table branch_table(
    id int,
    address varchar
);

create table account_table(
    accid int,
    balance int,
    type varchar,
    branch_ref ref branch_type
branch_ref SCOPE IS branch_table
);

如何列出每个分行的“储蓄”类型账户数量,并选择该分行的地址?

【问题讨论】:

  • 您可以使用 Join 和 Aggregate 函数来完成。
  • 尝试按idaddress 进行分组
  • 对不起,我写了一个答案,然后才注意到您正在使用 Oracle 的面向对象功能。我不知道如何从这些表中进行选择,并且在 Internet 上几乎找不到任何东西。如果您刚刚开始,您可能想要使用经典关系,即 account_table 中的 branch_table_id。然后它只是简单的标准 SQL 连接和聚合。而且我想用经典模型在 Internet 上查找帮助会容易得多。

标签: sql database oracle count reference


【解决方案1】:

对于每个分支,都会有唯一的地址,我们可以对这两列进行分组操作,或者我们可以对 branchid 进行分组,然后取最大地址,这不会改变任何内容。并且还需要对帐户类型进行分组以获取类型方面的详细信息。

SELECT b.id, b.address,COUNT(accid) no_of_accts
  FROM account_table a
INNER JOIN 
       branch_table b
    ON a.branch_ref = b.id 
 WHERE a.type = 'saving'
GROUP BY b.id,b.address,a.type;

【讨论】:

  • 为什么选择 max(b.address) ?没有意义,因为地址是 varchar
  • 使用 max of function 的 number 或 varchar 无关紧要,但在这里我使用了它,因为对于每个分支 id,您将获得唯一的分支地址,而不是将其放在组中我已将其作为地址的最大值。如果我们将其分组也没有区别...现在我已经更改了它,您可以立即尝试。
  • 谢谢。但是,在这两种情况下,我都会收到此映射错误: SQL 错误:ORA-22950: cannot ORDER objects without MAP or ORDER method 22950. 00000 - “cannot ORDER objects without MAP or ORDER method” *Cause: an object type must have a MAP or为除相等和不等比较之外的所有比较定义的 ORDER 方法。 *Action:为对象类型定义一个 MAP 或 ORDER 方法
【解决方案2】:
SELECT b.address,COUNT(*) AS no_of_accts
  FROM account_table a
INNER JOIN 
       branch_table b
    ON a.branch_ref = b.id 
 WHERE a.type = 'saving'
GROUP BY b.address;

【讨论】:

  • 它告诉我:SQL 错误:ORA-22950:不能在没有 MAP 或 ORDER 方法的情况下对对象进行排序 22950。00000 - “不能在没有 MAP 或 ORDER 方法的情况下对对象进行排序” *原因:对象类型必须具有为除相等和不等比较之外的所有比较定义的 MAP 或 ORDER 方法。 *Action:为对象类型定义一个 MAP 或 ORDER 方法
猜你喜欢
  • 1970-01-01
  • 2012-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-15
  • 2014-11-28
相关资源
最近更新 更多