我需要将列转换为行并获取其平均值。
例如,我有此表:
Name Math Science Computer
---- ---- ------- --------
Ted 90 89 95
Zed 99 98 98
Fed 85 75 90
输出应为:
Subject Average
------- -------
Math 88
Science 87.33
Computer 94.33
我该如何实现?感谢您的帮助。
如果您使用的是11G,则可以使用unpivot
:
SELECT subject, AVG(percentage) AS percentage
FROM (
SELECT * FROM tablea
UNPIVOT (percentage FOR subject IN (math, science, computer))
)
GROUP BY subject
ORDER BY subject;
SUBJECT PERCENTAGE
-------- ----------
COMPUTER 94.33
MATH 91.33
SCIENCE 87.33
但是由于您不是,所以您可以伪造它。从本网站改编:
SELECT subject, AVG(percentage) AS percentage
FROM (
SELECT DECODE(unpivot_row, 1, 'Math',
2, 'Science',
3, 'Computer') AS subject,
DECODE(unpivot_row, 1, math,
2, science,
3, computer) AS percentage
FROM tablea
CROSS JOIN (SELECT level AS unpivot_row FROM dual CONNECT BY level <= 3)
)
GROUP BY subject
ORDER BY subject;
SUBJECT PERCENTAGE
-------- ----------
Computer 94.33
Math 91.33
Science 87.33
在这两种情况下,内部结构select
都将行转换为列。在10克中,您只需要自己做即可。在SELECT ... CONNECT BY ...
刚刚产生虚值的列表,这必须有足够的覆盖要转换为行(如果你真的有1000,你真的应该重新审视数据模型)的列数。这两个decode
语句使用生成的数字来匹配列名和值-
自行运行内部选择以查找外观。
如果不采用动态SQL,就无法不必列出列-
只能使用real列出一次unpivot
,而使用伪造的10g版本只能列出两次,并且必须确保它们正确匹配,并且必须确保行号生成器正在产生足够的价值。(太多,您可能会得到奇怪的结果,但是由于任何额外的值在此处都为null且您正在使用avg
,因此在这种情况下并没有太大关系;就像健全性检查一样,您可能应该使其完全匹配)
。
或另一个版本,根据您总是想要除之外的所有列name
,这意味着您只需要列出您想要的列一次,并且在视觉上将它们匹配起来更容易-
只需添加when
子句即可;并且您不需要行计数:
SELECT subject, AVG(percentage) AS percentage
FROM (
SELECT column_name AS subject,
CASE
WHEN column_name = 'MATH' then math
WHEN column_name = 'SCIENCE' then science
WHEN column_name = 'COMPUTER' then computer
END AS percentage
FROM tablea
CROSS JOIN (
SELECT column_name
FROM user_tab_columns
WHERE table_name = 'TABLEA'
AND column_name != 'NAME'
)
)
GROUP BY subject
ORDER BY subject;
SUBJECT PERCENTAGE
------------------------------ ----------
COMPUTER 94.33
MATH 91.33
SCIENCE 87.33
我是数据科学的初学者,我正在尝试使用Pandas来旋转此数据框架: 所以它变成这样:(标签应该变成列,文件路径变成行。) “标签”列是一组或一类文件路径。我想把它转换成这样一种方式,它适合这个函数:tf。Keras.preprocessing.image.flow_from_dataframe 提前感谢所有帮助我的人。
问题内容: 考虑下面的示例,其中有一个包含人员记录的 Person 表和一个包含链接到人员的可选属性的 PersonAttribute 表: Table: Person Table PersonAttribute 我将如何编写一个查询,使所有具有属性的人都像列一样返回?我需要的结果集是: 因此,从本质上讲,我需要编写一个查询,该查询将获取所有带有所有唯一属性键的人记录,这些键被转换为具有每个人记录
问题内容: 我的表包含以下列: 我想显示如下: 如您所见,我想将列与自定义列名成对显示。这对是列A和B,列C和D以及列C和D。 问题答案:
问题内容: 将a 转换为同时保持Queue顺序的最快方法是什么? 问题答案: 最快的方法是首先使用LinkedList,它可用作列表或队列。 否则您需要复印 注意:处理PriorityQueue时,请使用循环,轮询每个元素并添加到列表中。要列出的PriorityQueue不维护堆顺序。
问题内容: 有没有一种快速的方法可以将表TD(使用CSS或Javascript)转换为TR,目前我有: 我想翻译成: ?? 问题答案: 您想要将HTML排列成这样: 变成这个: 正确? 您可以使用Javascript来做到这一点,但是,很难在不完全了解站点/ HTML文件的结构的情况下建议一种方法。我会去的。 假设您的代码带有ID(例如:您可以像这样在javascript中访问它: 您可以创建一个
问题内容: 我有一个具有当前值和先前值的sql表。 我想比较它们,如果值有变化,请在下表中显示。 在SQL 2008中是否可以不循环每一列? 问题答案: 您可以使用取消透视数据: 请参阅带有演示的SQL Fiddle。 仅仅因为我喜欢使用 数据透视 功能,所以以下是同时使用 取消 数据透视 和 数据透视 功能来获取结果的版本: 参见带有演示的SQL Fiddle