#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(*)
, чтобы его было проще использовать из вашего приложения