【问题标题】:How to count different rows and put them all in same table in SQL?如何计算不同的行并将它们全部放在 SQL 中的同一张表中?
【发布时间】:2020-04-24 23:15:06
【问题描述】:

我想计算我的数据库中每个类别有多少人申请,并将所有这些计数放在一个表中。我不知道该怎么做。我已经这样做了,但我想在一个查询中包含所有内容,而不是对每个类别都这样做。

select
count(cc.fk_id_candidates) as 'category A' 
from candidate_category cc, candidate c, category cat
where c.id=cc.fk_id_candidates and cc.fk_id_category=cat.id and category.name='A';

从该代码中,我得到了申请类别 A 的人数作为输出,这是正确的,但我也需要其他类别的相同信息。我尝试了案例,但它无法正常工作。

谢谢。

【问题讨论】:

  • 如果你能提供你的样本数据和输出会有帮助

标签: sql join group-by count dml


【解决方案1】:

您通常会在类别名称和/或 ID 上添加 group by 子句:

select cat.category.name, count(*) cnt
from candidate_category cc
inner join candidate c on c.id = cc.fk_id_candidates and 
inner join category cat on cc.fk_id_category = cat.id
group by cat.id, cat.category.name;

请注意,我将您的查询更改为使用标准联接(使用 on 关键字)而不是隐式联接(在 from 子句中使用逗号,在 where 子句中使用条件) - 这种旧语法不应该是在新代码中使用。

【讨论】:

    【解决方案2】:

    据我了解,您有三个表: - 候选人类别cc, - 候选人 c, - 类别猫

    另外,您已经使用 REFERENCES 创建了以下关系:

    where c.id=cc.fk_id_candidates 
    and cc.fk_id_category=cat.id 
    and category.name='A;
    

    现在,您必须已经将所有三个表放在一个表中,您可以通过以下方式查看它: 这是一个非常重要的步骤,可以找到一个通用列,您可以在其中过滤它并找到您想要的正确数据。

    Select * 
    
    from candidate_category cc, 
    candidate c, 
    category cat 
    
    where c.id=cc.fk_id_candidates 
    and cc.fk_id_category=cat.id 
    

    【讨论】:

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