Группировка по возвращает только одну строку

#sql #sqlite

Вопрос:

Таблица articles содержит 2 строки. Когда я группируюсь по article.id , мой результат содержит только 1 строку, хотя второй идентификатор статьи тоже должен быть там:

 sqlite> select * from articles;
e5c90df1-d525-46f8-9747-ea2939b8011d|||2021-08-06 18:25:00|2021-08-08 05:53:35.115709|
69c7b4d4-8c43-4f97-acdf-b620dbd528dc|||2021-09-17 21:25:00|2021-09-18 08:38:40.919855|

sqlite> select * from comments;

sqlite> SELECT t1.id, COUNT(t2.id) AS comment_count
   ...> FROM articles AS t1
   ...> LEFT JOIN comments AS t2 ON (t2.article_id = t1.id)
   ...> GROUP BY t2.article_id;
69c7b4d4-8c43-4f97-acdf-b620dbd528dc|0

sqlite> SELECT t1.id, COUNT(t2.id) AS comment_count
   ...> FROM articles AS t1
   ...> LEFT JOIN comments AS t2 ON (t2.article_id = t1.id)
   ...> WHERE t1.id = 'e5c90df1-d525-46f8-9747-ea2939b8011d'
   ...> GROUP BY t2.article_id
   ...> ;
e5c90df1-d525-46f8-9747-ea2939b8011d|0
 

Вот тестовая база данных:

 BEGIN TRANSACTION;
CREATE TABLE IF NOT EXISTS "articles" (
    "id"    VARCHAR(255) NOT NULL,
    PRIMARY KEY("id")
);
CREATE TABLE IF NOT EXISTS "comments" (
    "id"    VARCHAR(255) NOT NULL,
    "article_id"    VARCHAR(255) NOT NULL,
    PRIMARY KEY("id")
);
INSERT INTO "articles" VALUES ('e5c90df1-d525-46f8-9747-ea2939b8011d');
INSERT INTO "articles" VALUES ('69c7b4d4-8c43-4f97-acdf-b620dbd528dc');
COMMIT;
 

Комментарии:

1. Вы уверены, что такое поведение воспроизводимо?

2. @TimBiegeleisen Я не знаю, что еще я мог бы сделать, чтобы гарантировать это. Я вижу это в скрипте Python, в браузере Sqlite и в командной строке. Я добавил в вопрос SQL для создания тестовой базы данных.

3. Почему вы группируетесь по t2.article_id, а не t1.id?

4. Проверьте это: db-fiddle.com/f/jsXBmi5YPAhr7KznaowCcq/0

5. @forpas Да, это работает, спасибо! Теперь мне нужно понять, почему это так… Это упрощенный запрос из более сложной версии, где мне нужно подсчитать количество комментариев на статью. Поэтому я подумал, что логичнее сгруппироваться по comments.article_id .