汇总 SQL 表的更好工程实践是什么?

问题描述 投票:0回答:1

我正在为季度末报告创建一个汇总表,因此它有很多不同的指标。 我在 CTE 中创建每个部分,然后 UNION ALL.

我的问题是,最好的做法是在一个 CTE 中做尽可能多的事情,然后用 NULL 容纳其他 CTE,还是为每个特定指标创建 1 个 CTE,以便基本上我有一个值和一个指标? 哪种方法更有效?

示例 1....(两个指标都在 1 个表中,并通过列名区分)

WITH invoices AS (
 SELECT 
    'invoices' as metric
, COUNT(CASE WHEN CLOSED THEN invoice_id END) as closed_invoices
, COUNT(invoice_id) as invoices
)

或 示例 2 ....(指标被分成不同的 CTE)

WITH all_invoices AS (
 SELECT 
    'all invoices' as metric
, COUNT(invoice_id) as invoices
)
,  closed_invoices AS (
 SELECT 
    'all invoices' as metric
, COUNT(CASE WHEN CLOSED THEN invoice_id END) as closed_invoices
)
sql performance processing-efficiency data-entities
1个回答
1
投票

根据具体用例和数据大小,这两种方法都可以工作并且效率高。

方法 1(一个包含多个列的 CTE):当您要报告的指标数量很少并且将它们全部放在一个表中是有意义的时,这种方法会很有用。当可以使用列名或常量值轻松区分指标时,它是有效的。但是,如果指标数量增加并且查询变得复杂,则可能难以维护和更新查询。

方法 2(每个指标一个 CTE):当您有许多指标要报告并且每个指标都需要自己的查询时,这种方法很有用。这种方法允许更灵活地查询和聚合数据。当每个指标需要一组不同的过滤器或计算时,它是有效的,因为在一个 CTE 中管理复杂的查询可能很困难。但是,在管理多个查询和连接结果方面可能需要更多开销。

总而言之,两种方法之间的选择应基于您的用例的具体要求、数据的大小和查询的复杂性。

© www.soinside.com 2019 - 2024. All rights reserved.