【问题标题】:Get highest value per column without using union在不使用联合的情况下获得每列的最高值
【发布时间】:2018-01-26 07:54:45
【问题描述】:

假设,我们有 200 名学生和 6 个科目。输入列是

Name | Subject1 | Subject2 | ... through Subject 6

输出只有 3 列:

Name | Subject | Highest Score

我们需要学科最高分以及学科名称和分数作为输出。我们将如何在 Informatica 级别做到这一点?如果不使用联合,我们将如何在 SQL 级别做到这一点?

样本数据:

Name |Sub1 |Sub2 |Sub3 |Sub4 |Sub5 |Sub6
-----+-----+-----+-----+-----+-----+---- 
A    |5    |67   |77   |6    |34   |43 
B    |54   |54   |32   |3    |23   |21 
C    |1    |23   |43   |45   |43   |21 

【问题讨论】:

  • 听起来像 GROUP BY Subject with MAX(SCORE)。您是否有更多信息,例如示例数据和所需的输出?
  • 我猜测使用DECODE的条件聚合
  • 当然。将此视为样本数据: I/P : Name Sub1 Sub2 Sub3 Sub4 Sub5 Sub6 A 5 67 77 6 34 43 B 54 54 32 3 23 21 C 1 23 43 45 43 21 o/p: Name Sub_name Highest B Sub1 54 A Sub2 67 A Sub3 77 C Sub4 45 C Sub5 43 A Sub6 43

标签: sql mapping etl informatica informatica-powercenter


【解决方案1】:

在 Informatica 中很简单,使用排序方式设置为主题然后得分(升序)。然后聚合器按主题排序输入组。

一个 SQL GROUP BY 会处理它,即

SELECT MAXSCORES.SUBJECT, MAXSCORES.TOPRESULT, RESULTS.STUDENT AS TOPSCORER 
FROM (SELECT SUBJECT, MAX(SCORE) AS TOPRESULT FROM RESULTS GROUP BY SUBJECT) AS MAXSCORES 
WHERE MAXSCORES.SUBJECT = RESULTS.SUBJECT AND MAXSCORES.TOPRESULT = RESULTS.SCORE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 2021-07-19
    • 1970-01-01
    • 2020-05-03
    • 2022-01-05
    • 2023-04-06
    • 1970-01-01
    相关资源
    最近更新 更多