Please help optimize this query:
SELECT ts.SiteId, COUNT(ts.SiteId) AS Count
FROM ts
WHERE ts.SiteId not in
(SELECT ts.SiteId FROM ts WHERE ts.uniqueid = 'xxx')
GROUP BY ts.SiteId ORDER BY Count DESC
Please help optimize this query:
SELECT ts.SiteId, COUNT(ts.SiteId) AS Count
FROM ts
WHERE ts.SiteId not in
(SELECT ts.SiteId FROM ts WHERE ts.uniqueid = 'xxx')
GROUP BY ts.SiteId ORDER BY Count DESC
Because the outer query & inner query uses the same table (looks like it), can't the query be written this way?
SELECT ts.SiteId, COUNT(ts.SiteId) AS Count
FROM ts
WHERE ts.UniqueID <> 'xxx'
GROUP BY ts.SiteId ORDER BY Count DESC
SELECT ts.SiteId, COUNT(ts.SiteId) AS Count,
MAX(CASE WHEN ts.uniqueid = 'xxx' THEN 1 ELSE 0 END) As XXXUniqueID
FROM ts
GROUP BY ts.SiteId
HAVING XXXUniqueID = 0
ORDER BY Count DESC
In SQL 2005 CTE, it might look like this:
;
WITH
e AS
(
SELECT ts.SiteId FROM ts
EXCEPT
SELECT ts.SiteId FROM ts WHERE ts.uniqueid = 'xxx'
)
SELECT e.SiteId, COUNT(e.SiteId) AS Count
FROM e
GROUP BY e.SiteId ORDER BY Count DESC