SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » PostgreSQL » Помогите с sql-запросом
Помогите с sql-запросом [сообщение #956] Fri, 11 November 2022 10:27 Переход к следующему сообщению
Newbee в настоящее время не в онлайне  Newbee
Сообщений: 4
Зарегистрирован: November 2022
Junior Member
Всем привет!

Давно не брал SQL в руки, но все циклично.
Есть вот такая табличка
Код для создания и insert'a
На выходе sql-запроса надо получить следующий результат (вывести суммы цветов для каждой фамилии):
Name/Color|RED|YELLOW|GREEN|PURPLE
Ivanov | 3 | 1 | 2 | 0
Petrov | 2 | 3 | 1 | 1
Sidorov | 2 | 1 | 2 | 2

Крутил, вертел, но пока не вспомнил как из первой таблички получить вторую.
Re: Помогите с sql-запросом [сообщение #959 является ответом на сообщение #956] Fri, 11 November 2022 13:13 Переход к предыдущему сообщениюПереход к следующему сообщению
BlackEric в настоящее время не в онлайне  BlackEric
Сообщений: 83
Зарегистрирован: June 2022
Member
Select u_name, GREEN, RED, YELLOW, PERFECT
From test_tbl
PIVOT (count(u_color) for u_color in (GREEN, RED, YELLOW, PERFECT)
           ) AS test_pivot
Постгреса под рукой нет. Проверял на ms sql.
Re: Помогите с sql-запросом [сообщение #960 является ответом на сообщение #959] Fri, 11 November 2022 14:03 Переход к предыдущему сообщениюПереход к следующему сообщению
Newbee в настоящее время не в онлайне  Newbee
Сообщений: 4
Зарегистрирован: November 2022
Junior Member
У меня как раз PostgreSQL - ругается на PIVOT.

[Обновления: Fri, 11 November 2022 14:04]

Известить модератора

Re: Помогите с sql-запросом [сообщение #962 является ответом на сообщение #960] Fri, 11 November 2022 15:50 Переход к предыдущему сообщениюПереход к следующему сообщению
BlackEric в настоящее время не в онлайне  BlackEric
Сообщений: 83
Зарегистрирован: June 2022
Member
Можно как-то так:

SELECT u_name,
count(u_color) FILTER (WHERE u_color= "GREEN") AS "GREEN",
count(u_color) FILTER (WHERE u_color= "RED") AS "RED",
count(u_color) FILTER (WHERE u_color= "YELLOW") AS "YELLOW",
count(u_color) FILTER (WHERE u_color= "PERFECT") AS "PERFECT"
FROM test_tbl
GROUP BY u_name;

Не проверял, т.к. не на чем.
Re: Помогите с sql-запросом [сообщение #973 является ответом на сообщение #962] Sun, 13 November 2022 13:50 Переход к предыдущему сообщениюПереход к следующему сообщению
fraks в настоящее время не в онлайне  fraks
Сообщений: 59
Зарегистрирован: June 2022
Географическое положение: Новосибирск
Member
http://sql2.ru/viewtopic.php?t=79&sid=28f6ea99c39e8c3b74 230a6d7ec6d19d

select
  u_name,
  --
  sum ( case when u_color = 'RED'     then 1 else 0 end ) as RED,
  sum ( case when u_color = 'YELLOW'  then 1 else 0 end ) as YELLOW,
  sum ( case when u_color = 'GREEN'   then 1 else 0 end ) as GREEN,
  sum ( case when u_color = 'PERFECT' then 1 else 0 end ) as PERFECT,
  sum ( case when u_color = 'PURPLE'  then 1 else 0 end ) as PURPLE

from
  test_tbl

group by
  u_name
;  

+=========+=====+========+=======+=========+========+
| u_name  | red | yellow | green | perfect | purple |
+=========+=====+========+=======+=========+========+
| Petrov  | 2   | 3      | 1     | 1       | 0      |
| Sidorov | 2   | 1      | 2     | 2       | 0      |
| Ivanov  | 3   | 1      | 2     | 0       | 0      |
+---------+-----+--------+-------+---------+--------+
Re: Помогите с sql-запросом [сообщение #977 является ответом на сообщение #962] Mon, 14 November 2022 10:05 Переход к предыдущему сообщению
Newbee в настоящее время не в онлайне  Newbee
Сообщений: 4
Зарегистрирован: November 2022
Junior Member
Спасибо! Этот запрос наботает!
Предыдущая тема: CSV запрос
Переход к форуму:
  


Текущее время: Sun Dec 04 01:22:38 MSK 2022

Общее время, затраченное на создание страницы: 0.01526 секунд