Простое представление MySQL, состоящее из агрегированных данных из разных таблиц - PullRequest
0 голосов
/ 03 марта 2019

Попытка создать простое представление, которое объединяет итоги в один ряд.Хитрость в том, что я хочу получить эти итоги из нескольких таблиц.

Таким образом, я могу просто выбрать одну строку, чтобы получить итоги для множества вещей, которые я хочу отслеживать.

Пока я не могу заставить это работать, и большинство постов такого рода связано с объединениями.

CREATE VIEW stats AS
  select COUNT(DISTINCT publisher.name) as totalPublisher,
  select COUNT(DISTINCT series.name) as totalSeries
 From
  publisher,
  series

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

[…] простое представление, которое объединяет итоги в одну строку […]

То, что вы описываете, не просто;это включает в себя подсчет сумм различных наборов записей.Это, по необходимости, сложный запрос, объединяющий разные наборы записей.

Вы правы, что объединение - это хороший способ сделать это (одна из причин состоит в том, что он сообщает СУБД, какой результат вы хотите, а некак получить его).Но в приведенном вами конкретном примере, по-видимому, нет никакой корреляции между значениями, которые вы пытаетесь собрать в один ряд.

Итак, еще один способ сделать это:

CREATE VIEW stats AS
SELECT
    COUNT (SELECT DISTINCT name FROM publisher) AS total_publisher,
    COUNT (SELECT DISTINCT name FROM series) AS total_series
0 голосов
/ 03 марта 2019

Вы можете использовать подзапросы в 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...