如何使这个联合查询更有效率?

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 保留为AN。如果需要字符串,可以使用 case 表达式:

(CASE WHEN typ = 'A' THEN 'Offer' ELSE 'Order' END)

【讨论】:

感谢戈登,它成功了!非常好,非常简单:)

以上是关于如何使这个联合查询更有效率?的主要内容,如果未能解决你的问题,请参考以下文章

mysql多表left join联合查询效率问题5

mysql多表left join联合查询效率问题5

选择使用联合查询

怎样使数据库中的多表实现联合查询

sql语句联合查询 与 视图想比较的话,那个效率快,为啥。

SQL联合查询(内联左联右联全联)的语法