我想要一种汇总数据库表的方法,以便将共享公共ID的行汇总为输出的一行。
我的工具是SQLite和Python2.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中遍历整个表并累积的dict
of来做到这一点dicts
,这有点笨拙。我愿意使用Python或SQLite提供更好的解决方案,以表格形式给出数据。
在python方面,您可以使用itertools魔术来重新排列数据:
data = [('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)]
from itertools import groupby, islice
from operator import itemgetter
from collections import defaultdict
stores = sorted(set(row[1] for row in data))
# probably splitting this up in multiple lines would be more readable
pivot = ((fruit, defaultdict(lambda: None, (islice(d, 1, None) for d in data))) for fruit, data in groupby(sorted(data), itemgetter(0)))
print 'Fruit'.ljust(12), '\t'.join(stores)
for fruit, prices in pivot:
print fruit.ljust(12), '\t'.html" target="_blank">join(str(prices[s]) for s in stores)
输出:
Fruit Coles IGA Woolw
Apple 1.5 1.7 1.6
Banana 0.5 0.7 0.6
Cherry 5.0 None None
Date 2.0 None 2.1
Elderberry None 10.0 None
问题内容: 我正在使用Microsoft SQL Server Management Studio 2008。 我有看起来像这样的数据: 我希望结果显示如下: 这些列是未知的,所以我知道我需要一个动态查询。我已经尝试过使用数据透视功能进行动态查询,但只在相同类型的值下进行分组。所以聚合函数对我不利。 这是我尝试过的查询: 执行(@DynamicPivotQuery) 接下来,我添加了row_num
问题内容: 我有一张这样的产品零件表: 部分 我想要一个查询,将返回这样的表: 在其实际实施中,将有数百万个产品零件 问题答案: 不幸的是,MySQL没有函数,但是您可以使用聚合函数和语句对其进行建模。对于动态版本,您将需要使用准备好的语句: 请参见带有演示的SQL Fiddle 如果只有几列,则可以使用静态版本:
我在使用PIVOT SQL脚本时遇到了一个“小”问题。我目前的解决方案基于类似的问题 动态枢轴 . 我已经写好了PIVOT脚本,基本上没问题。然而,我的情况是这样的,脚本输出类似这样的内容,而不是将唯一的条目放在单行上 而我所寻找的结果应该是这样的 这是脚本 我将不胜感激一些可以帮助我解决这个问题的指示。我在这里做了一个小提琴,由于某种奇怪的原因,它没有输出任何东西,但生成架构的所有代码都在那里
问题内容: 好吧,我有一张看起来像这样的表 现在,我需要将其转换为: 我一直在看动态透视图示例,但是我似乎无法使其适合我的情况。 有人可以帮忙吗? 问题答案: 看下面的例子
问题内容: 示例选择: 输出: 是否可以按时间顺序对记录进行排序,排除列“月”和“年”?没有列出所有列。 UPD 需要: 就像是: 问题答案: 要对记录进行排序,可以将以下内容添加到sql的末尾 注意:枢轴列名称区分大小写,因此需要用引号引起来 这是完整的查询,仅选择您需要的列: