简单的MySQL视图由来自不同表的聚合数据组成

问题描述 投票:0回答:2

试图创建一个简单的视图,将总数保持在一行。这里的诀窍是我想从多个表中获取这些总数。

这样我就可以选择那一行来获取我想要跟踪的一堆东西的总数。

到目前为止,我无法让这个工作,并且这类事情的大多数帖子都与连接有关。

CREATE VIEW stats AS
  select COUNT(DISTINCT publisher.name) as totalPublisher,
  select COUNT(DISTINCT series.name) as totalSeries
 From
  publisher,
  series
mysql sql view
2个回答
1
投票

您可以在SELECT中使用子查询:

CREATE VIEW stats AS
  select (select COUNT(DISTINCT p.name) from publisher p) as totalPublisher,
         (select COUNT(DISTINCT s.name) from series s) as totalSeries;

注意:表中的名称很可能是不同的。如果是这样,那么做更有效:

CREATE VIEW stats AS
  select (select count(*) from publisher p) as totalPublisher,
         (select count(*) from series s) as totalSeries;

1
投票

[...]简单的视图,将总数保持在一行[...]

你所描述的并不简单;它涉及计算不同记录集的总数。这是必要的,复杂的查询将不同的记录集合在一起。

你是正确的,连接是一个很好的方法(一个原因是它告诉RDBMS你想要什么结果而不是如何得到它)。但是在你给出的具体例子中,你试图在一行中汇总的值之间显然没有相关性。

另外一种方法是:

CREATE VIEW stats AS
SELECT
    COUNT (SELECT DISTINCT name FROM publisher) AS total_publisher,
    COUNT (SELECT DISTINCT name FROM series) AS total_series
© www.soinside.com 2019 - 2024. All rights reserved.