2015-04-08 37 views
0

我做了這個SELECT,但我認爲它可以改進。有誰知道如何才能讓它變得更好?如何改進包含子查詢的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; 

它帶來以下結果:

Result

回答

1

的一種方法是,使條件的總和爲

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; 
+0

來到這裏後同樣的事情 –

+0

哈看起來我們是有相同的想法:-) –

+0

非常感謝,阿比克!它比我的更好。從現在開始,我將開始使用你的方式。 –