sql - 如何使用postgresql按自定义计数排序?

标签 sql postgresql join count

我有两个表:

公司:(id,名称)

worker :(id,姓名,国家)

我想获取所有公司并按给定国家/地区的员工数量对它们进行排序。

对于寻找拥有更多美国 worker 的公司的查询,结果应为:

#workers from USA | company id | company name 
----------------------------------------------
        90              6           foo corp     
        45              9           bar corp     
        0               3         foobar corp    

我试过:

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;

但这计算的是所有 worker ,无论他们来自哪个国家/地区。

有什么想法吗?

最佳答案

您可以使用相关子查询轻松做到这一点:

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

关于sql - 如何使用postgresql按自定义计数排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1403456/

相关文章:

Sqlite 在连接中合并列

sql - oracle:如何获取最新更改的记录匹配条件

SQL MERGE INTO(尝试使用子查询插入数据库时​​出现问题)

python - 来自 python,如何将整数写入(十六进制)bytea 字段

sql - 棘手的 Postgresql 查询

postgresql - 具有多个 `where` 案例的 Postgres 多重更新

php - mysqli_num_rows = 0,而它应该是 1

mysql - 为什么 MySQL 累积和会产生错误的结果

mysql - 加入查询 laravel 4.2 的 Where 子句

mysql - 连接 3 个相关表 mySql