【问题标题】:Count number of employees that earn more than x value and less than x value by city按城市计算收入超过 x 值和低于 x 值的员工人数
【发布时间】:2021-04-14 15:44:05
【问题描述】:

表名为employee,列是citysalary员工

目标:在单个查询中,按城市统计所有收入 >=1300 值小于

city stipendio employee
Milano 1200 employee1
Roma 1000 employee2
Milano 2000 employee3
Roma 900 employee4
Milano 1600 employee5

我单独做的查询:

#1

select
CITTA,
COUNT(*)
FROM
employee
WHERE city in ( 'Milano', 'Roma')
and salary>=1300 
GROUP BY city;

#2

select
city,
COUNT(*)
FROM
employee
WHERE city in ( 'Milano', 'Roma')
and salary<=1300
GROUP BY city;

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    使用条件聚合。也就是说,在聚合中包含 CASE 表达式。

    SELECT
      city,
      SUM(CASE WHEN salary <= 1300 THEN 1 ELSE 0 END)  less_than_or_equal_to,
      SUM(CASE WHEN salary >  1300 THEN 1 ELSE 0 END)  greater_than
    FROM
      employee
    WHERE
      city IN ( 'Milano', 'Roma')
    GROUP BY
      city;
    

    【讨论】:

    • 谢谢!我是 sql 新手,我学会了一种新方法
    • 样本数据仅显示城市“米兰”和“罗马”。但是假设桌子上还有其他人?根据规定的要求,我认为特定城市实际上是无关紧要的,因此应该删除 WHERE CITY IN ..。
    • @EdStevens - 引用 OP...“我单独做了:#1 #2” - 这两个查询都包括 WHERE 子句。如果它在问题中,它会出现在我的答案中;)
    • @MatBailie,如果有人问如何在脚上开枪,我不会盲目地告诉他们该怎么做。人们经常问错误的问题来解决他们的问题。见xyproblem.info我更多的是在教育人们,而不仅仅是给出固定的答案。
    【解决方案2】:

    试试这个。

    select
    city,
    sum(case when salary<=1300 then 1 else 0 end) below,
    sum(case when salary>1300 then 1 else 0 end) above
    
    
     from employee
    
    WHERE city in ( 'Milano', 'Roma')
    group by city
    
    
    
    

    【讨论】:

    • 谢谢!它与之前回答的人相似,但效果相同且非常好,我得到了我想要的结果:)
    猜你喜欢
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多