【问题标题】:How to display the number of people who line in same area and with same characteristics如何显示同一区域和具有相同特征的排队人数
【发布时间】:2020-12-16 10:26:22
【问题描述】:

我是 sql 新手,所以我请求帮助是否可以显示居住在具有相同特征的同一区域的人数。 这是我的示例表。

面积

AreaID  Area_name
-----------------
001     India 
002     Boston
003     US

第二张桌子:

P_Id  | P_name |  car  | AreaID
------|--------|-------|-------
P01   | John   |  yes  | 001
P02   | Mary   |  null | 001
P03   | Chris  |  yes  | 003
P04   | Jane   |  null | 001
P05   | Ben    |  null | 002
...   
... 
P99   | May    |  null | 002
...

我想要一个查询来返回在表中注册的人数。

我希望的答案是显示同一地区有车的人数。

AreaID | Havecar
-------|--------
001    |       2
002    |       7

或显示最多人拥有来自不同地区的汽车

AreaID  | numberOfPeople
--------|--------------
002     |         32

这两个可以用sql查询吗?

【问题讨论】:

    标签: sql count left-join where-clause


    【解决方案1】:

    我希望答案能显示同一地区有车的人数。

    你可以使用聚合:

    select areaid, count(*) havecar
    from person
    where car = 'yes'
    group by areaid
    

    如果你也想显示没有任何汽车的区域,那么你可以从area 表开始,并带上personleft join

    select a.areaid, coalesce(p.havecar, 0) havecar
    from area
    left join (
        select areaid, count(*) havecar
        from person
        where car = 'yes'
        group by areaid
    ) p on p.areaid = a.areaid
    

    【讨论】:

    • 感谢您回答我的问题。想问一下,如果像BMW和Jaguar那样插入car属性而不是yes并且仍然保留null。我已经更改了 where car ='Jaguar' 但为什么它显示没有选择行
    • @user12717227:您可以将where 子句更改为where car is not null
    • 谢谢@GMB,直到现在我才知道可以输入 is not null。学习新事物。
    【解决方案2】:

    使用 GROUP BY 查询:

    SELECT AREAID, CAR, COUNT(*) AS HAVECAR
      FROM PERSON
      GROUP BY AREAID, CAR
      HAVING CAR = 'yes'
      ORDER BY AREAID, CAR
    

    db<>fiddle here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-15
      • 1970-01-01
      • 2012-12-30
      • 1970-01-01
      • 2020-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多