我想要一种汇总数据库表的方法,以便将共享公共 ID 的行汇总到一行输出中。
我的工具是 SQLite 和 Python 2.x。
例如,给定下表我当地超市的水果价格......
+--------------------+--------------------+--------------------+
|Fruit |Shop |Price |
+--------------------+--------------------+--------------------+
|Apple |Coles |$1.50 |
|Apple |Woolworths |$1.60 |
|Apple |IGA |$1.70 |
|Banana |Coles |$0.50 |
|Banana |Woolworths |$0.60 |
|Banana |IGA |$0.70 |
|Cherry |Coles |$5.00 |
|Date |Coles |$2.00 |
|Date |Woolworths |$2.10 |
|Elderberry |IGA |$10.00 |
+--------------------+--------------------+--------------------+
...我想制作一个汇总表,显示每个超市每种水果的价格。空格应由 NULL 填充。
+----------+----------+----------+----------+
|Fruit |Coles |Woolworths|IGA |
+----------+----------+----------+----------+
|Apple |$1.50 |$1.60 |$1.70 |
|Banana |$0.50 |$0.60 |$0.70 |
|Cherry |NULL |$5.00 |NULL |
|Date |$2.00 |$2.10 |NULL |
|Elderberry|NULL |NULL |$10.00 |
+----------+----------+----------+----------+
我相信文献称这为“数据透视表”或“数据透视查询”,但显然SQLite 不支持PIVOT
. (该问题中的解决方案使用硬编码LEFT JOIN
s。这对我并不真正有吸引力,因为我事先不知道“列”名称。)
现在我通过在 Python 中遍历整个表并累积 adict
来做到这一点dicts
,这有点笨拙。我愿意接受更好的解决方案,无论是 Python 还是 SQLite,它们都会以表格形式提供数据。