gpt4 book ai didi

t-sql - 性能调整 tSQL 查询计数(*) 和子查询

转载 作者:行者123 更新时间:2023-12-02 21:01:56 24 4
gpt4 key购买 nike

我知道有更好的方法来完成我在这里想要完成的任务。尽管查询有效,但我担心它的性能会随着数据集的增长而受到影响。

我什至不需要有人重写我所拥有的内容,如果他们愿意为我指明我应该研究的主题的方向,我将不胜感激。

我试图通过此查询返回的是处于或高于特定状态的记录数。

预先感谢您的帮助!

选择
( 选择计数(*)
从表 1 c1
WHERE ( c1.U_KEY3 NOT LIKE 'z%' AND (c1.U_KEY1 = '' or c1.U_KEY1 IS NULL) )
)因为“状态为空”
,
( 选择计数(*)
从表 1 c1
WHERE ( c1.U_KEY3 不像 'z%' 并且 LEFT(c1.U_KEY1,2) >= '70' )
) 作为“状态 > 70”
,
( 选择计数(*)
从表 1 c1
WHERE ( c1.U_KEY3 不像 'z%' 并且 LEFT(c1.U_KEY1,2) >= '50' )
) 作为“状态> 50”
,
( 选择计数(*)
从表 1 c1
WHERE ( c1.U_KEY3 不像 'z%' 并且 LEFT(c1.U_KEY1,2) >= '30' )
) 作为“状态 > 30”
,
( 选择计数(*)
从表 1 c1
WHERE ( c1.U_KEY3 不像 'z%' 并且 LEFT(c1.U_KEY1,2) >= '10' )
) AS '状态 > 10'

最佳答案

您可以使用 CASE 语句将所有子查询合并到一个查询中:

SELECT
SUM(CASE WHEN c1.U_KEY1 = '' OR c1.U_KEY1 IS NULL THEN 1 ELSE 0 END) AS 'STATUS IS EMPTY',
SUM(CASE WHEN LEFT(c1.U_KEY1,2) >= '70' THEN 1 ELSE 0 END) AS 'STATUS > 70',
SUM(CASE WHEN LEFT(c1.U_KEY1,2) >= '50' THEN 1 ELSE 0 END) AS 'STATUS > 50',
SUM(CASE WHEN LEFT(c1.U_KEY1,2) >= '30' THEN 1 ELSE 0 END) AS 'STATUS > 30',
SUM(CASE WHEN LEFT(c1.U_KEY1,2) >= '10' THEN 1 ELSE 0 END) AS 'STATUS > 10'
FROM TABLE1 c1
WHERE c1.U_KEY3 NOT LIKE 'z%'

但这可能不如单个子查询运行得那么快。

关于t-sql - 性能调整 tSQL 查询计数(*) 和子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37801550/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com