我有两张桌子:

Companies: (id, name, city)
Workers: (id, name)

我想得到所有的公司,并按员工人数进行分类.

结果应该是:

count | company id | company name | city
------------------------------------------
90         6           foo corp      NY
45         9           bar corp      LA
0          3         foobar corp     HO

我试过:

select 
    c.*, 
    count(w.id) as c 
from 
    companies c 
left join 
    workers w 
on 
    c.id = w.company_id 
group by 
    c.id 
order by 
    c desc;

但这不起作用,因为它告诉我也要按g.名称分组:/

有什么 idea 吗?

推荐答案

表和列的别名是相同的,所以不要这样做.这不是无效的,只是很难遵循.

无论如何,请包括您 Select 的所有不是group by中集合的列:

select 
    count(w.id) as mycount,
    w.company_id,
    c.company_name,
    c.city
from 
    companies c 
    left join workers w on 
        c.id=w.company_id 
group by 
    w.company_id,
    c.company_name,
    c.city
order by mycount desc;

Postgresql相关问答推荐

将几个左连接合并为一个

Postgr不列出运算符和函数

当条件的计算结果为假(或真)时停止执行查询

Rust中使用sqlx的多线程postgres操作的惯用方法是什么?

supabase 中的交易

执行准备好的语句不返回数据

从单选插入到多个表

错误:分区表的唯一约束必须包括所有分区列

Postgis 不只使用索引扫描

PostgreSQL unnest 与空数组

如何在 Sequelize ORM 中插入 PostGIS GEOMETRY 点?

在 Postgres 中查询 JSON 对象数组

如何从 .sql postgresql 备份恢复单个表?

Rails:创建删除表级联迁移

在执行 postgresql 函数时提交事务

将主键更改为自动递增

PostgreSQL:使用 psql 命令行实用程序时 Windows 上的编码问题

从没有行的计数中获取 0 值

在 PostgreSQL 中使用 Cursors进行分页

Postgresql 用随机值更新每一行