编写查询(最好是在 sqlalchemy 中)以计算在 postgres table 中由另一列分组的列中唯一值的出现次数

Write a query (preferably in sqlalchemy) to count number of occurrence of unique values in a column grouped by another column in a postgres table

我的项目使用 AWS Chalice 框架和 sqlalchemy。

这是项目中的示例 table。

我需要从 table 获取两种格式的数据。我需要两个单独的查询,它们应该以不同的格式提供数据,因为两者都有单独的 api。请不要合并查询以同时提供两种格式的数据,因为数据集很大并且会出现性能问题,并且如前所述,我需要单独使用它们。

第一种格式:

我想获取按城市分组的不同工作的人数,如果工作字段是 empty/none,则应将其视为无工作。

{
   "Bangalore":{
      "Engineer": 2,
      "No Job": 2,
      "Paramedic": 1,
   },
   "Delhi":{
      "Architect": 2,
      "Doctor": 1,
   },
   "Mumbai":{
      "Doctor": 2,
      "Engineer": 1,
      "No Job": 1,
   }
}

第二种格式:

我想获取按城市分组的独特职位和人员的数量。

{
   "Bangalore":{
      "job_titles": 3,
      "persons": 5,
   },
   "Delhi":{
      "job_titles": 2,
      "persons": 3,
   },
   "Mumbai":{
      "job_titles": 3,
      "persons": 4,
   }
}

解释:

目前,我正在通过 运行 一个简单的 Select * from table 类型查询实现这一点,并对其进行迭代以形成嵌套字典(在 Python 中)。问题是这个处理需要很长时间。

我不确定这种格式的数据是否可以实现。因此,任何可以轻松快速(实时)转换数据的查询都将受到赞赏。

我已经在这个问题上停留了一个多月了,所以感谢任何类型的帮助。但请尝试在 sqlalchemy 查询中提供答案。

谢谢

这就像 SQL - count and group by 的基础知识。看起来像求职面试问题。

select city, job, count(*) as count from person_jobs group by city, job;

在Python中:

cities_jobs = collections.defaultdict(dict)
for city, job, count in query_result:
  cities_jobs[city][job] = count