【问题标题】:How to formulate a query and view for the following structure? [closed]如何为以下结构制定查询和视图? [关闭]
【发布时间】:2019-06-19 10:32:35
【问题描述】:

考虑下面的表结构

表A

ColumnA ColumnB ColumnC
Ro1      A         1
Ro1      A         1
Ro7      A         3
Ro2      C         1
Ro3      B         1
Ro3      B         1
Ro6      B         2
Ro4      C         2
Ro5      A         2

任务:使用两列 (ColumnA, ColumnB) 创建上面规定的表,然后开发一个查询/视图,该查询/视图将生成如上视图所示的结构,其中 ColumnC 在视图中而不是在表中找到,并且其内容是通过分别考虑ColumnA和ColumnB中值的变化自动生成的。

我只是不明白如何制定这个查询。

【问题讨论】:

  • 我假设因为这个问题的提问方式是家庭作业或工作面试相关问题,请参阅How do I ask and answer homework questions?
  • " 我只是不明白如何制定这个查询。" 我建议先阅读有关CREATE VIEW Syntax的 MySQL 手册
  • 如果您没有 PRIMARY KEY,那么您就没有真正的表。因此,问题就超出了关系数据库的范围。
  • 我主要使用 mysql,但我保留 oracle 只是为了了解查询和更多查看者
  • 要添加到@APC 的评论中,Hancy 为了更好地理解本网站上标签的含义,我建议您下次阅读说明,在提出问题时您也可以阅读它。明确oracle 标签有警告不要将该标签用于 Oracle 拥有的产品

标签: mysql sql database


【解决方案1】:

您可以使用 DENSE_RANK 分析函数解决此问题。这在 MySQL 8.0 版本中可用。 Find out more

 select columnA
        , columnB
        , dense_rank() over (partition by columnB order by columnA) as columnC
from tableA 

警告:这就是在 Oracle 中完成的方式。我认为相同的语法也应该在 MySQL 中工作。但是,文档显示了一些不同的东西。因为我现在没有 MySQL 可以玩,所以我正在对冲我的赌注:)

 select columnA
        , columnB
        , dense_rank() over W as columnC
from tableA 
WINDOW w AS (PARTITION BY columnB ORDER BY columnA);

MySQL 文档介绍了to create a view.

【讨论】:

    猜你喜欢
    • 2021-11-07
    • 2013-08-17
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    相关资源
    最近更新 更多