Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在SQL alchemy中连接同一个表并计算数据_Python_Mysql_Sql_Orm_Sqlalchemy - Fatal编程技术网

Python 如何在SQL alchemy中连接同一个表并计算数据

Python 如何在SQL alchemy中连接同一个表并计算数据,python,mysql,sql,orm,sqlalchemy,Python,Mysql,Sql,Orm,Sqlalchemy,我有一张这样的桌子: | id | company_name | income | year | |----|--------------|--------|------| | 0 | A | 10 | 2010 | | 1 | A | 20 | 2011 | | 2 | A | 30 | 2012 | | 3 | B | 20 | 2010 | | 4 | B

我有一张这样的桌子:

| 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 |
|                | 2010 | 2011 | 2012 |
|----------------|------|------|------|
| income         | 10   | 20   | 30   |
| increase_ratio | -    | 2    | 1.5  |
我想要一张这样的桌子:

| 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 |
|                | 2010 | 2011 | 2012 |
|----------------|------|------|------|
| income         | 10   | 20   | 30   |
| increase_ratio | -    | 2    | 1.5  |
在SQL中,我可以通过使用alias和join获得这种结果,但是如何使用python SQL alchemy获得这种结果呢

该表的数据库为MySQL,原表的架构如下:

from sqlalchemy import MetaData, Integer, Float, String
from sqlalchemy import Table, Column

metadata = MetaData()

income = Table(
    'income', metadata,
    Column('company_id', Integer, primary_key=True),
    Column('company_name', String(255), nullable=False),
    Column('income', Float, nullable=False),
    Column('year', Integer, nullable=False),
)
试试这个:

select 'Income' AS ` `, MAX(CASE WHEN Year= 2010 THEN income END)`2010`
  ,MAX(CASE WHEN Year= 2011 THEN income END)`2011`
  ,MAX(CASE WHEN Year= 2012 THEN income END)`2012`
from(
  SELECT A.*,(A.income/B.income)increase_ratio
  FROM My_Table A
  LEFT JOIN My_Table B ON B.id = A.id-1
  WHERE A.company_name = 'A'
  )D
 UNION
 select 'increase_ratio' AS ` `,MAX(CASE WHEN Year= 2010 THEN increase_ratio END)`2010`
  ,MAX(CASE WHEN Year= 2011 THEN increase_ratio END)`2011`
  ,MAX(CASE WHEN Year= 2012 THEN increase_ratio END)`2012`
from(
  SELECT A.*,(A.income/B.income)increase_ratio
  FROM My_Table A
  LEFT JOIN My_Table B ON B.id = A.id-1
  WHERE A.company_name = 'A'
  )D
请在列表中检查此项

输出:


您还需要使用别名和连接:,您使用的是哪台服务器,SQL server、MySQL还是其他什么?我使用的是MySQL谢谢这个漂亮的脚本,我将尝试将其转换为SQL alchemy表单,看看它是否有效。