首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在postgresql中按自定义计数排序?

如何在postgresql中按自定义计数排序?
EN

Stack Overflow用户
提问于 2009-09-10 05:04:02
回答 2查看 2.8K关注 0票数 0

我有两张表:

公司:(id,名称)

工人:(id,姓名,国家)

我想要获得所有公司,并根据来自给定国家的员工数量对它们进行排序。

对于查找拥有更多来自美国的员工的公司的查询,结果应该是:

代码语言:javascript
复制
#workers from USA | company id | company name 
----------------------------------------------
        90              6           foo corp     
        45              9           bar corp     
        0               3         foobar corp    

我试过了:

代码语言:javascript
复制
select 
    count(w.country='USA') as mycount,
    w.company_id,
    c.company_name
from 
    companies c 
    left join workers w on 
        c.id=w.company_id 
group by 
    w.company_id,
    c.company_name
order by mycount desc;

但这是将所有工人计算在内,而不考虑他们的国家。

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-10 08:17:10

使用相关子查询可以很容易地做到这一点:

代码语言:javascript
复制
SELECT
  (SELECT count(*) FROM workers w WHERE w.company_id=c.id AND w.country='USA') AS mycount,
  c.id,
  c.company_name
FROM
  companies c
ORDER BY mycount DESC
票数 4
EN

Stack Overflow用户

发布于 2009-09-10 05:13:15

用COUNT(*)替换COUNT(w.country='USA')有帮助吗?我相信您的查询需要引用Companies表中的字段,而不是workers表上的字段,因为您的left join保留了为特定公司/国家拉出的workers集是空集的可能性。

尝试:

代码语言:javascript
复制
select count(*) as mycount,
       c.company_id,
       c.company_name
from   companies c
left join workers w on c.id=w.company_id 
group by c.company_id, c.company_name
order by mycount desc;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1403456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档