我可以优化这个SQL查询吗?

Mik*_*ike 1 sql sql-server optimization sql-server-2005

下面是我想要做的一个示例查询,它完成了工作,但我觉得子查询不是最好的方式去这里.有什么指针吗?

SELECT DISTINCT
    u.UserID,   
    (SELECT COUNT(LoginID) FROM Logins WHERE Success = 1 AND UserID = u.UserID) AS Successful,
    (SELECT COUNT(LoginID) FROM Logins WHERE Success = 0 AND UserID = u.UserID) AS Unsuccessful,        
    (SELECT TOP 1 LoginDate FROM Logins WHERE UserID = u.UserID ORDER BY LoginDate DESC) AS LastLogin
FROM 
    Users u INNER JOIN 
    Logins l ON u.UserID = l.UserID
Run Code Online (Sandbox Code Playgroud)

顺便说一句,上面的例子看起来不像需要连接,但在真正的解决方案中我做了其他一些列...

Dan*_*n J 6

我是否遗漏了重要的内容,或者您​​是否可以通过单个聚合查询执行此操作?

SELECT u.UserID,
    SUM(CASE WHEN Success = 1 THEN 1 ELSE 0 END) AS Successful,
    SUM(CASE WHEN Success = 0 THEN 1 ELSE 0 END) AS Unsuccessful,
    MAX(LoginDate) AS LastLogin
FROM Users u
INNER JOIN Logins l on u.UserID = l.UserID
GROUP BY u.UserID
Run Code Online (Sandbox Code Playgroud)