【问题标题】:Postgresql count queryPostgresql 计数查询
【发布时间】:2021-03-23 09:39:11
【问题描述】:

我有这种结构的表

create table job_tags (
    job_id varchar not null,
    tag varchar(50) not null,

    foreign key (job_id) references jobs(id) on delete cascade,
    unique (job_id, tag)
);

我想执行单个 sql 查询来获取与特定作业相关的标签及其在所有作业中的出现。 现在我有这样的查询,显然不起作用 SELECT tag, count(tag) as tagcount FROM job_tags WHERE job_id=$1 GROUP BY tagcount ORDER BY tagcount DESC。它可能只返回一个标签计数。如果有人知道如何正确构建此查询,我将非常高兴!谢谢

【问题讨论】:

    标签: sql postgresql count subquery having-clause


    【解决方案1】:

    我会推荐group by,并使用having 子句进行过滤。 Postgres 的布尔聚合函数为此派上用场:

    select tag, count(*) as cnt_jobs
    from job_tags
    group by tag
    having bool_or(job_id = $1)
    order by cnt_jobs desc
    

    【讨论】:

    • @bredart 。 . .我认为这是更好的解决方案。
    【解决方案2】:

    你可以使用sub-query如下:

    SELECT t.tag, count(*) as tagcount FROM job_tags t
    WHERE t.tag in (select tt.tag from job_tags tt where tt.job_id=$1)
    GROUP BY t.tag
    ORDER BY tagcount DESC;
    

    【讨论】:

    • 不起作用 :( 错误:GROUP BY 中不允许使用聚合函数当我删除 GROUP BY 时,它说 GROUP BY 必须在查询中
    • 查看更新后的答案。在 groupby 中它应该是标签。有没有改变
    • 太棒了!它有效,非常感谢你,但需要将 ORDER BY t.tagcount DESC 替换为 ORDER BY tagcount DESC;
    猜你喜欢
    • 2012-10-16
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多