【问题标题】:Return table listing distinct values in each column返回表列出每列中的不同值
【发布时间】:2018-12-26 18:10:58
【问题描述】:

我正在熟悉一个数据表,其中包含许多用于描述个人工作角色的列。我想返回一个表,在每列中列出表中每列存在的不同值。

我了解如何返回单个列的不同值列表,但我希望我的所有结果都在一个表中,并且彼此相邻。顺序无关紧要。

示例性输入,其中每一行是一名员工:

--title-- --function-- --class--
analyst    sleeping     professional
analyst    sleeping     ED
analyst    sleeping     MD
scientist  observing    VP
scientist  managing     VP
scientist  researching  associate

预期输出:

--title-- --function-- --class--
analyst   sleeping     professional
scientist observing    ED
          managing     MD
          researching  VP
                       associate

【问题讨论】:

  • 我对您的输入感到困惑。不同的工作角色是该输入中的,而不是,对吧?
  • 这最好由客户端/显示代码完成,结果是 3 个单独的查询。
  • 数据库并没有真正做到这一点,因为一行的整个想法是它上面的所有内容都是相关的。可以这样做,但在 mysql 之类的低端数据库中,它会相当难看,除非您使用的是 MySQL 8/MariaDB10。你确定这是你想要的吗?生成“column_name,column_value”的 2 列输出会更直接
  • 你的 DBMS 的版本是多少?
  • @jmabs sql 数据库 可以 做到这一点,但它最终会变得非常复杂、过于复杂和不自然。将不相关的数据显示为相关的数据违反了他们的设计原则。

标签: sql greenplum distinct-values


【解决方案1】:

您可以使用这种方法。但是这种操作与RDBMS系统的关系结构相矛盾。

select * from (
    select distinct title, null as function, null as class from Table1
    union
    select distinct null, function, null from Table1
    union 
    select distinct null, null, class from Table1
)
order by title, function, class

【讨论】:

    【解决方案2】:

    您可以使用row_number() 和聚合来做到这一点:

    select min(title) as title, min(function) as function, min(class) as class
    from ((select title, null as function, null as class,
                  row_number() over (order by title) as seqnum
           from t
           group by title
          ) union all
          (select null as title, function, null as class,
                  row_number() over (order by function) as seqnum
           from t
           group by function
          ) union all
          (select null as title, null as function, class,
                  row_number() over (order by class) as seqnum
           from t
           group by class
          )
         ) tfc
    group by seqnum;
    

    【讨论】:

      猜你喜欢
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 2015-06-02
      • 2015-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-08
      相关资源
      最近更新 更多