我有PostgreSQL数据库,我试图打印我所有的用户(人)。
当我执行这个查询时
-- show owners
-- sorted by maximum cars amount
SELECT p.id
FROM car c JOIN person p ON c.person_id = p.id
GROUP BY p.id
ORDER BY COUNT(p.name) ASC;
我把所有车主按汽车数排序
输出:3 2 4 1
当我尝试链接所有者ID时,所有订单都出错。
SELECT *
FROM person p
WHERE p.id IN (
SELECT p.id
FROM car c JOIN person p ON c.person_id = p.id
GROUP BY p.id
ORDER BY COUNT(p.name) ASC);
输出:1 2 3 4
等数据
你看顺序不对。所以我的问题是,我如何才能保存这个命令?
2条答案
按热度按时间55ooxyrt1#
使用
join
代替subquery
。试试这个ppcbkaq52#
把这团乱解开。先聚合,后加入:
参见:
不需要连接到
person
两次。如果你计算 * 大多数或所有行 *,这应该是最快的。对于 * 小的选择 *,相关子查询更快:
关于你的原创:
IN
在右边取一个 set,元素的顺序被忽略,所以ORDER BY
在子查询中没有意义。