如何改进包含子查询的 SELECT 语句?
How to improve a SELECT statment that contains subqueries?
我做了这个 SELECT,但我认为它可以改进。有谁知道如何让它变得更好?
SELECT SUBSTRING_INDEX(acctEmail, '@', -1) as Domain,
(SELECT count(*) FROM accounts
WHERE acctType = 'A' AND SUBSTRING_INDEX(acctEmail, '@', -1) = Domain
GROUP BY SUBSTRING_INDEX(acctEmail, '@', -1)
) as qtdAlias,
(SELECT count(*) FROM accounts
WHERE acctType = 'C' AND SUBSTRING_INDEX(acctEmail, '@', -1) = Domain
GROUP BY SUBSTRING_INDEX(acctEmail, '@', -1)
) as qtdContas,
(SELECT count(*) FROM accounts
WHERE acctType = 'L' AND SUBSTRING_INDEX(acctEmail, '@', -1) = Domain
GROUP BY SUBSTRING_INDEX(acctEmail, '@', -1)
) as qtdListas,
count(*) as Total
FROM accounts
GROUP BY Domain
ORDER BY Total DESC;
结果如下:
一种方法是将条件总和设为
select
substring_index(acctEmail, '@', -1) as Domain,
sum(
case when acctType = 'A' then 1 else 0 end
) as qtdAlias,
sum(
case when acctType = 'C' then 1 else 0 end
) as qtdContas,
sum(
case when acctType = 'L' then 1 else 0 end
) as qtdListas,
count(*) as Total
from accounts
GROUP BY Domain
ORDER BY Total DESC;
我做了这个 SELECT,但我认为它可以改进。有谁知道如何让它变得更好?
SELECT SUBSTRING_INDEX(acctEmail, '@', -1) as Domain,
(SELECT count(*) FROM accounts
WHERE acctType = 'A' AND SUBSTRING_INDEX(acctEmail, '@', -1) = Domain
GROUP BY SUBSTRING_INDEX(acctEmail, '@', -1)
) as qtdAlias,
(SELECT count(*) FROM accounts
WHERE acctType = 'C' AND SUBSTRING_INDEX(acctEmail, '@', -1) = Domain
GROUP BY SUBSTRING_INDEX(acctEmail, '@', -1)
) as qtdContas,
(SELECT count(*) FROM accounts
WHERE acctType = 'L' AND SUBSTRING_INDEX(acctEmail, '@', -1) = Domain
GROUP BY SUBSTRING_INDEX(acctEmail, '@', -1)
) as qtdListas,
count(*) as Total
FROM accounts
GROUP BY Domain
ORDER BY Total DESC;
结果如下:
一种方法是将条件总和设为
select
substring_index(acctEmail, '@', -1) as Domain,
sum(
case when acctType = 'A' then 1 else 0 end
) as qtdAlias,
sum(
case when acctType = 'C' then 1 else 0 end
) as qtdContas,
sum(
case when acctType = 'L' then 1 else 0 end
) as qtdListas,
count(*) as Total
from accounts
GROUP BY Domain
ORDER BY Total DESC;