Как сделать чтобы подзапрос с агрегацией отрабатывал построчно для группировки?

92
01 ноября 2021, 19:50

Есть таблица постов post от пользователей такого вида:

post_id: 1, 2, 3, 4, 5
user_id: 1, 1, 2, 1, 3
status: 0, 0, 1, 2, 1

Задача: Вывести количество постов всего и количество постов, прошедших модерацию (где статус 1 или 2) по каждому юзеру.

Я пишу такого типа запрос:

select user_id, count(post_id) as 'all_posts', (select count(post_id)
from post where status in (1,2)) as 'approved'
from post
group by user_id

но (внезапно), подсчёт всех постов проходит норм, а подзапрос генерит одно число и копирует его по всем юзерам. Т.е. я понимаю что так и должно быть, но не понимаю как сделать чтобы подзапрос отрабатывал каждый раз свою строку.

Answer 1

mySql позволяет просуммировать булевы значения, автоматически преобразовывая false в 0 и true в 1. Так что в данном случае подзапрос вам просто не нужен

select user_id, count(post_id) as 'all_posts', sum(status <> 0) as 'approved'
from `likes`
group by user_id
READ ALSO
Амперсанд в регулярном выражении mysql?

Амперсанд в регулярном выражении mysql?

Подскажите как заставить работать следующий запрос:

157
Сохранение данных в приложении андроид

Сохранение данных в приложении андроид

Есть приложение с БД MySQL (пользователь из интерфейса приложения БД изменять не может, только читать данные из нее), кроме того, некоторые настройки...

198
Python парсинг проблема с вводом элементов

Python парсинг проблема с вводом элементов

Возникла проблемка ,у меня должно выйти 134 элементов но почему то только 1 элемент

81