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)
顺便说一句,上面的例子看起来不像需要连接,但在真正的解决方案中我做了其他一些列...
我是否遗漏了重要的内容,或者您是否可以通过单个聚合查询执行此操作?
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)