我有以下选择查询
(
SELECT COUNT(*)
FROM TABLE
WHERE birth_date >= TO_DATE(:start_date1, 'YYYY/MM/DD')
AND birth_date <= TO_DATE(:end_date1, 'YYYY/MM/DD')
) AS count1
字符串
我还需要找到start_date2
和end_date2
的计数,这将导致单独的变量count2
获取count2
的最佳方法是什么?
我重写了查询,并将start_date1
和end_date1
替换为start_date2
和end_date2
。有没有其他方法可以不重写查询?
3条答案
按热度按时间jtoj6r0c1#
如果你想避免重写整个查询,你可以通过使用CTE(公共表表达式)来计算单个查询中两个日期范围的计数来实现这一点。这种方法并没有完全消除重写查询,但封装了共享逻辑。下面是一个使用CTE的示例:
字符串
此SQL查询使用一个名为DateRanges的CTE,通过对每个日期范围使用单独的SELECT NULL(*)子查询来计算count1和count2,而无需重复整个查询逻辑。此方法允许您在一次查询执行中计算这两个计数。
eivnm1vs2#
您可以连接一个返回每个日期的子查询,然后使用
GROUP BY
。字符串
lbsnaicq3#
您可以使用条件聚合仅查询表一次:
字符串
如果你想把它作为一个大型查询的一部分,那么
CROSS JOIN
:型