SQL — запрос, который возвращает имя пользователя вместе с их общим количеством записей

#sql #join #group-by #count

#sql #Присоединиться #группировать по #количество

Вопрос:

Я новичок в работе с реляционными базами данных, и мне трудно понять, как написать запрос, чтобы делать то, что я хочу. У меня есть две таблицы, которые имеют взаимосвязь.

 CREATE TABLE DocumentGroups (
          id INTEGER PRIMARY KEY AUTOINCREMENT,
          comments TEXT,
          Username TEXT NOT NULL,
      )   

CREATE TABLE Documents (
        id INTEGER PRIMARY KEY,
        documentGroupId INT NOT NULL,
        documentTypeId INT NOT NULL,
        documentTypeName TEXT NOT NULL,  
        succesfullyUploaded BIT
      )
  

Я хотел бы запросить таблицу Documents и получить количество записей для каждого имени пользователя. Вот запрос, который я придумал:

 SELECT Count(*)
FROM DOCUMENTS 
JOIN DocumentGroups ON Documents.documentGroupId=DocumentGroups.id 
GROUP BY Username
  

В настоящее время у меня есть 2 записи в таблице Documents, по 1 от каждого пользователя. Этот запрос выводит:

 [{Count(*): 1}, {Count(*): 1}]
  

Это выглядит правильно, но есть ли у меня возможность связать имя пользователя с каждым количеством. Прямо сейчас я не могу узнать, какое количество принадлежит каждому пользователю.

Ответ №1:

Вы почти на месте. Ваш запрос уже выдает одну строку на имя пользователя (это ваше group by предложение). Все, что осталось сделать, это также поместить этот столбец в select предложение:

 select dg.username, count(*) cnt
from documents d
join documentgroups dg on d.documentgroupid = dg.id 
group by dg.username
  

Примечания:

  • псевдонимы таблиц облегчают чтение и запись запросов

  • в запросе с несколькими таблицами всегда указывайте все столбцы с таблицей (псевдонимом), к которой они принадлежат

  • вероятно, вы хотите присвоить результату псевдоним count(*) , чтобы его было проще использовать из вашего приложения