方法,您可以根据需要添加其他条件。我喜欢此解决方案:)在接受之前,我会调查我的问题。Postgres要求我在每个案例中添加END语句。这是标准SQL还是postgres决定需要的东西当jobs.status\u id=5,然后1 ELSE 0结束活动\u计
方法,您可以根据需要添加其他条件。我喜欢此解决方案:)在接受之前,我会调查我的问题。Postgres要求我在每个案例中添加END语句。这是标准SQL还是postgres决定需要的东西当jobs.status\u id=5,然后1 ELSE 0结束活动\u计,sql,query-optimization,subquery,Sql,Query Optimization,Subquery,方法,您可以根据需要添加其他条件。我喜欢此解决方案:)在接受之前,我会调查我的问题。Postgres要求我在每个案例中添加END语句。这是标准SQL还是postgres决定需要的东西当jobs.status\u id=5,然后1 ELSE 0结束活动\u计数时的情况否则它会向我抛出异常。@nzignab这不是postgres独有的。那是我的健忘。我更新了答案,只是想注意到执行时间减少了大约75%,谢谢:DI会想象性能是相似的,即使这种方法只使用1 SELECT.+1,但我仍然使用sum,例如su
方法,您可以根据需要添加其他条件。我喜欢此解决方案:)在接受之前,我会调查我的问题。Postgres要求我在每个
案例中添加END
语句。这是标准SQL还是postgres决定需要的东西<代码>当jobs.status\u id=5,然后1 ELSE 0结束活动\u计数时的情况
否则它会向我抛出异常。@nzignab这不是postgres独有的。那是我的健忘。我更新了答案,只是想注意到执行时间减少了大约75%,谢谢:DI会想象性能是相似的,即使这种方法只使用1 SELECT.+1,但我仍然使用sum,例如sum(当jobs.status\u id不在(8,3,11)中时,则使用1 ELSE 0 END)
。使用COUNT
可以利用COUNT
忽略空值这一事实,而不是每个人都意识到这一点。@Conrad:这一点很好。我认为这个决定取决于个人喜好。在我看来,当你试图计算某物的数量时,我更清楚地看到了计数,但这两种方法都很好。)我知道你的意思,SUM(active_COUNT)active_COUNT看起来很有趣
SELECT
(SELECT count(*)
FROM "jobs"
WHERE
jobs.creator_id = 5 AND
jobs.status_id NOT IN (8,3,11) /* 8,3,11 being 'inactive' related statuses */
) AS active_count,
(SELECT count(*)
FROM "jobs"
WHERE
jobs.creator_id = 5 AND
jobs.due_date < '2011-06-14' AND
jobs.status_id NOT IN(8,11,5,3) /* Grabs the overdue active jobs
('5' means completed successfully) */
) AS overdue_count,
(SELECT count(*)
FROM "jobs"
WHERE
jobs.creator_id = 5 AND
jobs.due_date BETWEEN '2011-06-14' AND '2011-06-15 06:00:00.000000'
) AS due_today_count
SELECT
SUM(active_count) active_count,
SUM(overdue_count) overdue_count
SUM(due_today_count) due_today_count
FROM
(
SELECT
CASE WHEN jobs.status_id NOT IN (8,3,11) THEN 1 ELSE 0 END active_count,
CASE WHEN jobs.due_date < '2011-06-14' AND jobs.status_id NOT IN(8,11,5,3) THEN 1 ELSE 0 END overdue_count,
CASE WHEN jobs.due_date BETWEEN '2011-06-14' AND '2011-06-15 06:00:00.000000' THEN 1 ELSE 0 END due_today_count
FROM "jobs"
WHERE
jobs.creator_id = 5 ) t
HAVING SUM(active_count) is not null
SELECT
COALESCE(SUM(active_count)) active_count,
COALESCE(SUM(overdue_count)) overdue_count
COALESCE(SUM(due_today_count)) due_today_count
SELECT
COUNT(CASE WHEN
jobs.status_id NOT IN (8,3,11) THEN 'Manticores Rock' ELSE NULL
END) as [active_count]
SELECT
COUNT(CASE WHEN
jobs.status_id NOT IN (8,3,11) THEN 1
END) as [Count1],
COUNT(CASE WHEN
jobs.due_date < '2011-06-14'
AND jobs.status_id NOT IN(8,11,5,3) THEN 1
END) as [COUNT2],
COUNT(CASE WHEN
jobs.due_date BETWEEN '2011-06-14' AND '2011-06-15 06:00:00.000000'
END) as [COUNT3]
FROM
"jobs"
WHERE
jobs.creator_id = 5
IIF ( boolean_expression, true_value, false_value )
SELECT
COUNT(
IIF(jobs.status_id NOT IN (8,3,11), 1, 0)
) as active_count,
COUNT(
IIF(jobs.due_date < '2011-06-14' AND jobs.status_id NOT IN(8,11,5,3), 1, 0)
) as overdue_count,
COUNT(
IIF(jobs.due_date BETWEEN '2011-06-14' AND '2011-06-15 06:00:00.000000', 1, 0)
) as due_today_count
FROM
"jobs"
WHERE
jobs.creator_id = 5