SQL炼金术中如何加入同一张表并计算数据

jjdblast

我有一张看起来像这样的表:

| 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL炼金术联接来自同一表的多个列

来自分类Dev

一对多烧瓶 SQL炼金术

来自分类Dev

将CitusDB与SQL炼金术一起使用

来自分类Dev

如何使用SQL炼金术进行“开头”查询?

来自分类Dev

在插入SQL炼金术中忽略辅助联接条件

来自分类Dev

从多对多SQL炼金术和Postgresql中删除

来自分类Dev

如何在Oracle SQL中的同一张表上查找和过滤数据

来自分类Dev

Sql炼金术; 外键错误

来自分类Dev

SQL炼金术/多类实现

来自分类Dev

SQL炼金术药瓶删除

来自分类Dev

SQL炼金术药瓶删除

来自分类Dev

Sql炼金术; 外键错误

来自分类Dev

使用同一张表中的一列数据比较一列SQL

来自分类Dev

同一张VBA中的数据透视表

来自分类Dev

从多行比较的同一张表中获取数据?

来自分类Dev

在同一张表中查找错误/重复的数据

来自分类Dev

在同一张表中同时插入MySQL:如何?

来自分类Dev

如何从同一张表中获取相关行?

来自分类Dev

如何根据ID从同一张表中减去

来自分类Dev

如何比较同一张表中的记录列?

来自分类Dev

如何比较同一张表中的值

来自分类Dev

如果主键用作同一张表中的外键,如何添加数据?

来自分类Dev

我如何并排显示同一张表中的数据

来自分类Dev

如何从休眠状态下的同一张表中获取数据

来自分类Dev

如何从orientDB的同一张表中检索两个不同边的数据?

来自分类Dev

熊猫和SQL炼金术:指定列数据类型

来自分类Dev

烧瓶SQL-炼金术多对多关系一次附加多个obj?

来自分类Dev

Oracle SQL-如何比较同一张表中2套之间的行数?

来自分类Dev

SQL炼金术。查询中的tuple_ func和无值