【问题标题】:Can use aggregate functions with join?可以将聚合函数与连接一起使用吗?
【发布时间】:2020-08-13 03:50:57
【问题描述】:
  • 表项目:pid(pk)、名称...
  • 表类别:pid(pk)、project(project's pid)、parent(other category's pid) ...
  • 表计数:项目(项目的 pid)、类别(类别的 pid)、计数 ...

我之前用过这个查询

SELECT
categories.*, projects.pid, projects.name, parent_category.*
FROM categories
INNER JOIN projects ON projects.pid = categories.project
LEFT JOIN categories AS parent_category ON parent_category.pid = categories.parent

效果很好

这一次我们需要 SUM, COUNT 个数据。所以我添加了“counts”表并进行了这个查询。

SELECT
categories.*, projects.pid, projects.name, SUM(counts.count), COUNT(counts.count),
parent_category.*, SUM(parent_category_count.count), COUNT(parent_category_count.count)
FROM categories
INNER JOIN projects ON projects.pid = categories.project
LEFT JOIN counts ON counts.category = categories.pid
LEFT JOIN categories AS parent_category ON parent_category.pid = categories.parent
LEFT JOIN counts AS parent_category_count ON parent_category_count.category = categories.pid

然后我得到

错误:聚合函数调用不能嵌套

我能做什么?这个查询基本上有意义吗?还是我应该拆分它?

【问题讨论】:

  • 你错过了group by
  • 请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入作为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出您可以给出的最少代码,即您显示的代码可以通过您显示的代码扩展为不正常。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表格的代码的 SQL。
  • 在考虑发布之前,请阅读手册和谷歌任何错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有和没有您的特定字符串/名称和站点:stackoverflow.com &标签;阅读许多答案。如果您发布问题,请使用一个短语作为标题。反映你的研究。请参阅How to Ask 和投票箭头鼠标悬停文本。

标签: sql postgresql join grouping aggregate-functions


【解决方案1】:

您应该添加一个适当的 GROUP BY 子句(在您的情况下应该是 categories.pid )

    SELECT
    categories.*
    , projects.pid
    , projects.name
    , SUM(counts.count)
    , COUNT(counts.count)
    , parent_category.*
    , SUM(parent_category_count.count)
    , COUNT(parent_category_count.count)
    FROM categories
    INNER JOIN projects ON projects.pid = categories.project
    LEFT JOIN counts ON counts.category = categories.pid
    LEFT JOIN categories AS parent_category ON parent_category.pid = categories.parent
    LEFT JOIN counts AS parent_category_count ON parent_category_count.category = categories.pid
    GROUP BY categories.pid 

或在您的评论中

    SELECT
    categories.*
    , projects.pid
    , projects.name
    , SUM(counts.count)
    , COUNT(counts.count)
    , parent_category.*
    , SUM(parent_category_count.count)
    , COUNT(parent_category_count.count)
    FROM categories
    INNER JOIN projects ON projects.pid = categories.project
    LEFT JOIN counts ON counts.category = categories.pid
    LEFT JOIN categories AS parent_category ON parent_category.pid = categories.parent
    LEFT JOIN counts AS parent_category_count ON parent_category_count.category = categories.pid
    GROUP BY categories.pid, projects.pid, parent_category.pid

【讨论】:

  • 谢谢!在我的情况下,它是按 categories.pid、projects.pid、parent_category.pid 分组
  • 答案已更新 .. 与您的小组通过 .. 如果我的答案是正确的或引导您找到正确的解决方案,请(过去 15 分钟)将其标记为已接受...请参阅此处@987654321 @
猜你喜欢
  • 2017-06-05
  • 1970-01-01
  • 2011-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-28
相关资源
最近更新 更多