@Great274

Как правильно написать запрос на выборку из базы PostgeSQL?

Есть таблица phones с полями:
phone - varchar
users - int[]

Есть вторая таблица items
id serial
user_id int
status smallint (3 - не продан, 7 - продан, 5 - резерв)

Надо написать запрос который на заданные телефоны возвращает количество проданных и не проданных вещей.

phone | saled | no_saled
-----------------+-------+----------
7924445544 | 4 | 1
8985545444 | 1 | 2

В MySQL Делается просто:

SELECT p.phone, 
SUM( i.status=7 ) as saled,
SUM( i.status=3 ) as no_saled
FROM items as i 
INNER JOIN phones as p 
ON i.user_id=p.users 
WHERE p.phone IN("7924445544", "8985545444") 
GROUP BY p.phone;


Но в Postgres такая конструкция не работает, помогите дельным советом
  • Вопрос задан
  • 412 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Если только поправить запрос, который у вас на той же схеме работает в mysql:
SELECT p.phone,
count(1) filter(where i.status=7 ) as saled,
count(1) filter(where i.status=3 ) as no_saled
FROM items as i
INNER JOIN phones as p
ON i.user_id=p.users
WHERE p.phone IN("7924445544", "8985545444")
GROUP BY p.phone;


Если же схема другая - то синтаксисом int[] обозначается массив из integer, такой штатных тип данных. В mysql такого нет. У вас именно массив чисел?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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