python - 我应该对派生表使用 LEFT JOIN、RIGHT JOIN、不同的表设计还是需要编码?

标签 python mysql sql pivot

<分区>

Possible Duplicate:
MySQL pivot table

我应该使用LEFT JOIN 使用派生表RIGHT JOIN 使用派生表,不同的表设计,还是我需要查询表并写入生成如下所示所需输出的 ​​Python 代码?

我想要得到的输出将产生以下输出示例:

==========================
| 2005   |  2006 |  2007 |  <--- These headings are not necessary
==========================
|   A    |  A    |  A    |
--------------------------
|  AA    |  AA   |  AA   |
--------------------------
|  BB    |  BB   |       |
--------------------------
|  C     |       |   C   |
--------------------------

查询的数据在包含(符号,年份)的两列表中:

====================
|  Symbol |  Year  |
====================
|   A     |  2005  |
--------------------
|   AA    |  2005  |
--------------------
|   BB    |  2005  |
--------------------
|   C     |  2005  |
--------------------
|   A     |  2006  |
--------------------
|   AA    |  2006  |
--------------------
|   BB    |  2006  |
--------------------
|   A     |  2007  |
--------------------
|   AA    |  2007  |
--------------------
|   C     |  2007  |
--------------------

最佳答案

SELECT MAX(CASE WHEN year = 2005 THEN Symbol ELSE NULL END) `2005`,
       MAX(CASE WHEN year = 2006 THEN Symbol ELSE NULL END) `2006`,
       MAX(CASE WHEN year = 2007 THEN Symbol ELSE NULL END) `2007`
FROM tableName
GROUP BY Symbol

如果您有未知的年份值,动态 SQL 查询是首选。

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(CASE WHEN year = ',
      year,
      ' THEN Symbol ELSE NULL end) AS ',
      CONCAT('`', year, '`')
    )
  ) INTO @sql
FROM TableName;

SET @sql = CONCAT('SELECT  ', @sql, ' 
                   FROM tableName 
                   GROUP BY Symbol');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

如果您想显示空字符串而不是 null 值,则需要 COALESCE

关于python - 我应该对派生表使用 LEFT JOIN、RIGHT JOIN、不同的表设计还是需要编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14016963/

相关文章:

python - 访问嵌套在字典python中的元组中的项目

python - 将 db.collection.drop() 中的 'collection' 解释为变量与设置数据库

python - 无法中断函数内的 python while 循环

mysql - sql文件添加表前缀

html - MySQL INSERT 使用表单后页面未呈现

sql - Oracle APEX : Error: SyntaxError: Unexpected end of JSON input

python - Pandas Dataframe 合并其中 1 列匹配,但另一列的值不存在

java - Hibernate - 注入(inject) MySql 函数

SQL创建数据库时授予其他用户db_owner

sql - 在 where 子句中使用 Oracle SQL 变量时出现问题