今天去笔试碰到的一道题。
  在一张员工表中,大概有1千万条数据。用一条高效的sql语句求出salary>9999 and age>35,salary >9999and age <35,salary <9999 and age>35 ,salary <9999and age<35,四个区间的人数。
求大佬指教

解决方案 »

  1.   

    SELECT 
    SUM(CASE WHEN salary > 9999 and age > 35 THEN 1 ELSE 0 END),
    SUM(CASE WHEN salary > 9999 and age < 35 THEN 1 ELSE 0 END),
    SUM(CASE WHEN salary < 9999 and age > 35 THEN 1 ELSE 0 END),
    SUM(CASE WHEN salary < 9999 and age < 35 THEN 1 ELSE 0 END)
    FROM TABLE_NAME
    1、这里有一个漏洞,就是salary = 9999 和 age = 35的数据会丢失。
    2、如果salary和age都是整数,可以把salary > 9999修改成salary >= 10000,其它的也类似这样改。
    3、最好在salary和age上加索引。
    4、如果有分区,可以统计每一个分区的结果后,再求和。