sqlalchemy如何从不同的表中划分2列

时间:2018-04-23 05:41:24

标签: python sql sqlalchemy

我有两个名为company_infocompany_income的表:

company_info:

| id | company_name | staff_num | year |
|----|--------------|-----------|------|
| 0  | A            | 10        | 2010 |
| 1  | A            | 10        | 2011 |
| 2  | A            | 20        | 2012 |
| 3  | B            | 20        | 2010 |
| 4  | B            | 5         | 2011 |

company_income:

| id | company_name | income | year |
|----|--------------|--------|------|
| 0  | A            | 10     | 2010 |
| 1  | A            | 20     | 2011 |
| 2  | A            | 30     | 2012 |
| 3  | B            | 20     | 2010 |
| 4  | B            | 15     | 2011 |

现在我想计算每家公司的平均员工收入,结果如下:

结果:

| id | company_name | avg_income | year |
|----|--------------|------------|------|
| 0  | A            | 1          | 2010 |
| 1  | A            | 2          | 2011 |
| 2  | A            | 1.5        | 2012 |
| 3  | B            | 1          | 2010 |
| 4  | B            | 3          | 2011 |

如何使用python SQLalchemy获得此结果?该表的数据库是MySQL。

2 个答案:

答案 0 :(得分:1)

加入表并进行标准总和。您希望使用此查询在MySQL中设置自己的视图,或者直接在程序中创建。

SELECT
  a.CompanyName,
  a.year,
  (a.staff_num / b.income) as avg_income

 FROM
  company_info as a

 LEFT JOIN
   company_income as b
 ON
   a.company_name = b.company_name
 AND
   a.year = b.year

你也想要几个(例如,staff_num不为null或不等于0且与收入相同。如果你可以在两个列中为同一公司/年有多个值,那么你将会想要对列中的值进行求和,然后按公司名称和年份分组

答案 1 :(得分:0)

试试这个:

SELECT 
    info.company_name,
    (inc.income / info.staff_num) as avg,
    info.year
FROM
    company_info info JOIN company_income inc
ON
    info.company_name = inc.company_name
AND
    info.year = inc.year