【问题标题】:How to improve a SELECT statment that contains subqueries?如何改进包含子查询的 SELECT 语句?
【发布时间】:2015-04-08 14:11:32
【问题描述】:

我做了这个 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;

它带来了以下结果:

【问题讨论】:

    标签: mysql select subquery


    【解决方案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;
    

    【讨论】:

    • 来这里发同样的东西
    • 哈看起来我们有相同的想法:-)
    • 非常感谢,阿比克!它比我的要好得多。从现在开始,我将开始使用你的方式。
    猜你喜欢
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    • 2018-03-03
    • 2012-01-15
    相关资源
    最近更新 更多