powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите с небольшим запросом.
8 сообщений из 8, страница 1 из 1
Помогите с небольшим запросом.
    #34120466
webler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть вот такая вот таблица

CREATE TABLE mnnotes
(
user_id int4,
status int4 DEFAULT 0,
)

user_id - не уникальный
status = -1|0|+1

Мне нужно вывести строку для конкретного юзера, подсчитав количество одинаковых statusos

Вариант типа такого, не работает:
SELECT COUNT(status) as s1 FROM mnnotes WHERE user_id = 23 AND
status = -1
UNION
SELECT COUNT(status) as s2 FROM mnnotes WHERE user_id = 23 AND
status = 0
UNION
SELECT COUNT(status) as s3 FROM mnnotes WHERE user_id = 23 AND
status = 1


Нужно плучить в итоге строчку
user_id count>0 count=0 count<0
...
Рейтинг: 0 / 0
Помогите с небольшим запросом.
    #34120724
ilejn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно попробовать примерно так

SELECT user_id ...
UNION ALL
SELECT user_id, 0 as f1, COUNT(..) as f2, 0 as f3 WHERE ...
UNION ALL
SELECT user_id, 0 as f1, 0 as f2, COUNT(...) as f3 WHERE ...


Всему этому нужно сказать GROUP BY по user_id
а для каждого из полей сделать SUM.

Можно попробовать придумать более элегантное решение...
...
Рейтинг: 0 / 0
Помогите с небольшим запросом.
    #34120798
webler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Union несколько иначе работает.
Он обьединяет по высоте данные. А нужно по ширине.

Вот нечто похожее на рабочий вариант, но все же не правильно считает. Но уже правильно выводную строку формирует.

SELECT
count(distinct mnnotes1.id) as good_notes,
count(distinct mnnotes2.id) as neutral_notes,
count(distinct mnnotes3.id) as bad_notes
FROM mnnotes
left outer join mnnotes mnnotes1 on (mnnotes1.status > 0)
left outer join mnnotes mnnotes2 on (mnnotes2.status = 0)
left outer join mnnotes mnnotes3 on (mnnotes3.status < 0)
WHERE mnnotes.user_id=23
...
Рейтинг: 0 / 0
Помогите с небольшим запросом.
    #34121008
ZemA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
срочно читать книжки по sql
Код: plaintext
1.
2.
3.
select user_id, status, count(*)
  from mnnotes
 group by user_id, status
...
Рейтинг: 0 / 0
Помогите с небольшим запросом.
    #34121013
ZemA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот то что вам нужно
Код: plaintext
1.
2.
3.
4.
5.
6.
select user_id,
       sum(case when status=- 1  then  1  else  0  end),
       sum(case when status= 0  then  1  else  0  end),
       sum(case when status= 1  then  1  else  0  end)
  from mnnotes
 group by user_id
...
Рейтинг: 0 / 0
Помогите с небольшим запросом.
    #34121062
webler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ZemAсрочно читать книжки по sql
Код: plaintext
1.
2.
3.
select user_id, status, count(*)
  from mnnotes
 group by user_id, status


Вот это дело совсем не то.
...
Рейтинг: 0 / 0
Помогите с небольшим запросом.
    #34121064
webler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ZemAвот то что вам нужно
Код: plaintext
1.
2.
3.
4.
5.
6.
select user_id,
       sum(case when status=- 1  then  1  else  0  end),
       sum(case when status= 0  then  1  else  0  end),
       sum(case when status= 1  then  1  else  0  end)
  from mnnotes
 group by user_id


А вот это именно ТО. Только добавить по конкретному юзеру where user_id = 23

Рабочий вариант. Спасибо.
Может еще кому пригодится :)
...
Рейтинг: 0 / 0
Помогите с небольшим запросом.
    #34121445
ilejn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
weblerUnion несколько иначе работает.
Он обьединяет по высоте данные. А нужно по ширине.


Я все-таки настаиваю, что мой вариант c UNION правильный, хотя и более "рыхлый", чем базирующийся на CASE. ;)
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите с небольшим запросом.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]