मेरे पास डेटाबेस है जिसमें id,chapter_name,chapter_num,verse_num,verse_text,testament कॉलम हैं।

मैं प्रत्येक पुस्तक में अध्यायनाम और अध्यायों की कुल संख्या को पुनः प्राप्त करना चाहता हूं।

मैं ऐसा करने के लिए निम्न क्वेरी का उपयोग कर रहा हूँ,

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
user1241241 18 अप्रैल 2020, 20:58

1 उत्तर

सबसे बढ़िया उत्तर

यह निरर्थक अध्याय (अध्याय_नम) और पुस्तक (अध्याय_नाम) की जानकारी के साथ छंदों की एक तालिका है। हमें पहले अतिरेक को समाप्त करना चाहिए और प्रत्येक पुस्तक और अध्याय के लिए एक पंक्ति प्राप्त करनी चाहिए। तब हम उन्हें गिन सकते हैं।

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

इसे आज़माएं

1
Schwern 18 अप्रैल 2020, 19:43