我有一张看起来像这样的表:
| 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 |
我想得到一张这样的 A 表:
| | 2010 | 2011 | 2012 |
|----------------|------|------|------|
| income | 10 | 20 | 30 |
| increase_ratio | - | 2 | 1.5 |
在 SQL 中,我可以通过使用别名和连接来获得这种结果,但是如何使用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 Fiddle 中检查这个
输出:
2010 2011 2012
Income 10 20 30
increase_ratio (null) 2 1.5
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句