172 похожих чатов

Есть таблицы: посты (posts), комментарии к постам (comments)и счетчик просмотров

комментариев (counters).
Мне нужно получить: общее количество комментов к посту, последний непрочитанный и количество непрочитанных.
Написал запрос, который работает как нужно, может быть его можно оптимизировать?
https://sqlize.online/sql/psql13/1065f701cf9236c52625b5a0782fc308/

10 ответов

8 просмотров

Я запрос вообще подробно не смотрел... но, скорее всего, он неправильный — из-за использования DISTINCT... причём мне кажется (по отрывкам вроде SELECT distinct(cnt.last_comment_id), cnt.count_unread), что Вы считаете, что DISTINCT — это функция, и совершенно зря.

Nickolay-Kisluhin Автор вопроса
Yaroslav Schekin
Я запрос вообще подробно не смотрел... но, скорее ...

Спасибо, убрал лишние DISTINCT и отказался от похода в таблицу posts. Мб еще что то можно сделать?

Nickolay Kisluhin
Спасибо, убрал лишние DISTINCT и отказался от пох...

Вы бы хоть написали, что обновили paste. ;) Но в этой тоже проблема с DISTINCT, нет?

Yaroslav Schekin
Я запрос вообще подробно не смотрел... но, скорее ...

Lag и lead можно использовать для определения первого и последнего

Nickolay-Kisluhin Автор вопроса
Yaroslav Schekin
Вы бы хоть написали, что обновили paste. ;) Но в э...

Извиняюсь) там вообще нужны уникальные

Nickolay Kisluhin
Извиняюсь) там вообще нужны уникальные

Ну и что? Я имею в виду вот это: https://t.me/pgsql/250393 Т.е. если кто-то вообще использует DISTINCT в запросе — это почти всегда ошибка (либо он там просто лишний, как у Вас по крайней мере в основном запросе).

Nickolay-Kisluhin Автор вопроса
Nickolay-Kisluhin Автор вопроса

Спасибо, убрал

Nickolay-Kisluhin Автор вопроса

Нет, сейчас посмотрю в документации

Nickolay-Kisluhin Автор вопроса

Спасибо, кажется то что нужно. немного переделал только под свой кейс: SELECT max(comment_id) as last_comment_id, SUM( case when not EXISTS ( SELECT 1 FROM counters AS cnt WHERE cnt.entity_id = c.comment_id AND cnt.entity_type = 'comment' ) then 1 else 0 end ) as count_unread , count(c.comment_id) as total_count FROM comments AS c where c.comment_post_id IN (1)

Похожие вопросы

Обсуждают сегодня

А чем вам питонисты не угодили?😂
.
79
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Привет, запускаю werf в dind в k8s, получаю ошибку на этапе build/beforeSetup: /.werf/stapel/embedded/bin/bash: /.werf/scripts/5898bdfe5214357d3706b879cc8d3d78460fb379607cbd...
florius0
7
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Dim Dim, [02.07.2024 11:07] DB 0x62 Dim Dim, [02.07.2024 11:07] DB 0x66 Dim Dim, [02.07.2024 11:07] кто пояснит что это?
Dim Dim
14
Ошибка: segmentation fault (core dumped) Код: pastebin.com/BEsNNSSV Сообщение от компилятора: отсутствует ОС: Arch Linux Ядро: x86_64 Linux 6.9.7-arch1-1 Процессор: Intel Cele...
sec
4
Ребят, а за скок можно впарить анон чат с апишкой и веб админкой ?
Eugene Неелов
15
Ещё такой вопрос. Мне необходимо хранить пароль пользователя локально. Для этого планирую использовать ini файл. Это для автозаполнения полей логин и пароль при авторизации. Е...
Евгений
19
Кстати, я тут еще с одной темой столкнулся, вот учу я C++, на таком то ресурсе, а остальные постоянно советуют практиковаться, что то писать, проекты, но как писать если вот т...
aaswq1
7
Добрый день, чат. Мне в очередь из других RabbitMQ по shovel валятся метрики в формате текста для Prometheus. Помогите пожалуйста подружить RabbitMQ и Prometheus, чтобы он (...
Aleksey
4
Карта сайта