Получить общее количество глав в каждой книге - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть база данных, в которой есть id, chapter_name, chapter_num, verse_num, verse_text, testament в качестве столбцов.

Я хотел бы получить chapterName и общее количество глав в каждой книге.

Для этого я использую следующий запрос:

select chapter_name, count(chapter_name) from TABLE_NAME group by chapter_num;

К сожалению, в нем приводится очень большое количество названий глав и повторяющихся названий глав в виде хорошо. Как я могу это исправить? Это пример ввода

id, chapter_name, chapter_num, verse_num, verse_text, testament

 1,   "Genesis",    1,             1,       "text",      0
 1,   "Genesis",    1,             2,       "text",      0
 1,   "Genesis",    1,             3,       "text",      0
 .
 .
 .
 1,   "Revelation",   1,             1,       "text",    0

Выход должен быть,

  `id`, `chapter_name`,`count(chapter_name)`



   1,       'Genesis',       50
   2,        'Exodus'        40
   .
   .

   66       'Revalation '    21

1 Ответ

1 голос
/ 18 апреля 2020

Это таблица стихов с избыточной информацией о главе (chapter_num) и книге (chapter_name). Сначала мы должны устранить избыточность и получить по одной строке для каждой книги и главы. Тогда мы можем посчитать их.

select
  chapter_name,
  count(chapter_num)
from (
  select
    chapter_name,
    chapter_num
  from verses
  group by chapter_name, chapter_num
)
group by chapter_name;

Избыточность указывает на плохо разработанную схему. Есть три фрагмента информации, поэтому должно быть три таблицы: книга, глава, стих.

create table books (
  id integer primary key,
  name text not null
);

create table chapters (
  id integer primary key,
  num integer not null,
  book_id integer not null references books(id),

  unique(book_id, num)
);

create table verses (
  id integer primary key,
  num integer not null,
  content text not null,
  chapter_id integer not null references chapters(id),

  unique(chapter_id, num)
);

Теперь, если мы хотим найти, сколько глав в каждой книге ...

select
  books.name, count(chapters.id)
from books
join chapters on chapters.book_id = books.id
group by books.id

Или сколько стихов в каждой книге ...

select
  books.name, count(verses.id)
from books
join chapters on chapters.book_id = books.id
join verses on verses.chapter_id = chapters.id
group by books.id

Попробуйте .

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