如何使这个联合查询更有效率?
Posted
技术标签:
【中文标题】如何使这个联合查询更有效率?【英文标题】:how to make this union query more effecient? 【发布时间】:2021-02-25 15:27:45 【问题描述】:我使用 UNION 连接创建了下面的 SQL 查询。
如您所见,我查询同一张表 2 次,条件略有不同。如果 TYP 是 A,那么它就是一个要约。如果 TYP 为 N 且 AB 为真,那么它就是一个命令。
整个事情都有效。但我猜有一种更优雅的方式来做到这一点?我希望你能告诉我那是什么! :)
谢谢。 (顺便说一句,如果有影响,请使用优势 sql)
SELECT
DATUM as report_month,
REGION as region,
count(DISTINCT NUMMER) as order_number,
'Offer' as Type
from xxxxxxxxxxxx
left join xxxxxxxxx on KDNR = anotherDAB.KDNR
WHERE DATUM = '2021-02-16' AND TYP = 'A'
group by report_month, region
UNION
SELECT
DATUM as report_month,
REGION as region,
count(DISTINCT NUMMER) as order_number,
'Order' as Type
from xxxxxxxxxxx
left join xxxxxxxxx on KDNR = anotherDAB.KDNR
WHERE DATUM = '2021-02-16' AND TYP = 'N' AND AB = true
group by report_month, region
【问题讨论】:
(1) 用您正在使用的数据库标记您的问题。 (2) 限定所有列引用,以便清楚您的查询在做什么。 (3) 指定更好的表名。还是两个子查询真的在同一张表上进行自连接? 嗨,戈登! 1) - 完成。 2)不确定要在这里添加什么,希望事情清楚吗? 3)完成,更新加入。我编辑了真实查询中的名称,以尝试使其更具可读性。希望我没有让事情变得更糟。我的问题更多的是方向> 例如,这是一个案例查询可以管理的东西。但我无法理解... 【参考方案1】:我怀疑你只是想要条件聚合:
SELECT DATUM as report_month, REGION as region,
count(DISTINCT NUMMER) as order_number,
typ
from xxxxxxxxxxxx left join
xxxxxxxxx
on KDNR = KDNR
WHERE DATUM = '2021-02-16' AND
(TYP = 'A' OR TYP = 'N' AND AB = true)
GROUP BY report_month, region, type;
以上将TYP
保留为A
或N
。如果需要字符串,可以使用 case
表达式:
(CASE WHEN typ = 'A' THEN 'Offer' ELSE 'Order' END)
【讨论】:
感谢戈登,它成功了!非常好,非常简单:)以上是关于如何使这个联合查询更有效率?的主要内容,如果未能解决你的问题,请参考以下文章