【发布时间】:2021-06-28 08:40:11
【问题描述】:
这是我下面的代码,它需要很长时间才能执行。当我添加 SELECT DISTINCT 时,它会变得很长。
我要做的是获得满足这些条件的独特公司,并计算每个公司拥有多少个团队(这由 auth_user u 表中的每个用户提供的 team_id 给出)。
任何帮助都会很棒,我想学习如何进行更好的 SQL 查询。我知道 GROUP BY 是执行此操作的更好方法,但我似乎无法理解。
SELECT DISTINCT u.company_id, c.name, c.company_type, c.office_location, (SELECT (COUNT(DISTINCT u.team_id)) FROM auth_user u WHERE u.company_id = c.id GROUP BY u.company_id) as number_of_teams, s.status, h.auto_renewal
FROM auth_user u, companies_company c, subscriptions_subscription s, hubspot_company h
WHERE u.company_id = c.id
AND s.company_id = c.id
AND h.myagi_id = c.id
ORDER BY u.company_id ASC
【问题讨论】:
-
请edit您的问题并添加使用
explain (analyze, buffers, format text)生成的execution plan(不是只是一个“简单”解释)为formatted text,并确保保留计划的缩进。粘贴文本,然后将```放在计划前一行和计划后一行。还请包括所有索引的完整create index语句。 -
今日提示:始终使用现代、明确的
JOIN语法。更容易编写(没有错误),更容易阅读和维护,如果需要更容易转换为外连接! (但是,没有性能差异。) -
“现代 JOIN 语法”已经超过 30 年了
-
子查询中不需要 GROUP BY,只要确保它仍然是相关的。
-
你还需要 SELECT DISTINCT 吗?是否会消除任何重复的行?
标签: sql postgresql select query-optimization distinct