powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вывод полей при JOIN
9 сообщений из 9, страница 1 из 1
Вывод полей при JOIN
    #39083622
Closius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Есть такой запрос (сформирован при помощи django orm):

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SELECT  ROUND(("marker"."levels" / 10000000000000)) AS "lvl_div", 
		MIN("marker"."id") AS "id", 
		AVG(ST_Y("marker"."point")) AS "y", 
		COUNT(ROUND(("marker"."levels" / 10000000000000))) AS "count", 
		AVG(ST_X("marker"."point")) AS "x" 
FROM "marker" 
INNER JOIN "my_user" ON ( "marker"."owner_id" = "my_user"."id" ) 
		WHERE (
				"my_user"."is_active" = true 
				AND "my_user"."is_blocked" = false 
				AND "my_user"."is_deleted" = false 
				AND "marker"."is_deleted" = false 
				AND "marker"."is_active" = true 
				AND NOT ("marker"."owner_id" IN (
						SELECT U2."user_source_id" AS Col1 
						FROM "blocked_user" U2 
						WHERE U2."blocked_user_target_id" = 2)) 
				AND ("marker"."max_age" >= 22 OR "marker"."max_age" IS NULL) 
				AND ("marker"."min_age" <= 22 OR "marker"."min_age" IS NULL) 
				AND ("marker"."allowed_gender" = 1 OR "marker"."allowed_gender" = 2)) 
GROUP BY ROUND(("marker"."levels" / 10000000000000)) 
HAVING COUNT(ROUND(("marker"."levels" / 10000000000000))) = 1;



Он выводит следующее:

Код: sql
1.
2.
3.
4.
5.
6.
lvl_div;	id;	        y;		count;	    x
431442211;	60527;	50.4665817458564;	1;	42.3044882282827
433221113;	59633;	53.875796739733;	1;	34.1714830996864
434333242;	60457;	63.5846316116864;	1;	50.3748939935136
432323443;	60090;	50.2688890111897;	1;	60.7999305558882
...



Как заставить его выводить также другие поля из таблицы marker и my_user? Если полей нет, то выводить Null
...
Рейтинг: 0 / 0
Вывод полей при JOIN
    #39083791
ursido
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Closius,

Что Вы ожидаете увидеть в этих полях?

При данной постановке вопроса - никак.
Точнее, можно вывести все поля, применив к каждому какую-нибудь агрегатную функцию (например: MIN("marker"."max_age") и т.п.). Смысла в данной операции нет.
...
Рейтинг: 0 / 0
Вывод полей при JOIN
    #39083814
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте использовать один из этих намеков.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
lexa=> select *, count(*) over(partition by f1) from t1;
 f1 | f2 | f3 | count 
----+----+----+-------
  1 |  1 |  1 |     2
  1 |  2 |    |     2
  3 |  3 |  3 |     1
  4 |  4 |    |     1
(4 rows)


Код: sql
1.
2.
3.
4.
5.
6.
7.
lexa=> select f1, array_agg(t1), count(*) from t1 group by f1;
 f1 |      array_agg       | count 
----+----------------------+-------
  1 | {"(1,1,1)","(1,2,)"} |     2
  3 | {"(3,3,3)"}          |     1
  4 | {"(4,4,)"}           |     1
(3 rows)
...
Рейтинг: 0 / 0
Вывод полей при JOIN
    #39083973
Closius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ursidoClosius,

Что Вы ожидаете увидеть в этих полях?


У меня есть пользователи. Каждый пользователь может иметь кучи маркеров. У этих маркеров есть определенный код, который может совпадать у пределенных маркеров не зависимо от того к какому пользователю он пренадлежит.

Мне надо делать запрос, чтобы вывести инфу маркеров и соотвествующих им пользователей после группировки по коду.
То есть я делаю группировку по коду и мне выдаются строки что у такого-то кода имеются столько то маркеров. Ок.

НО если кол-во = 1, то по id я должен получить список: маркер и связанный с ним юзер.
...
Рейтинг: 0 / 0
Вывод полей при JOIN
    #39083989
Closius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То есть мне надо этот запрос продолжить и выдать все id из таблицы что я получил равно айдишникам маркеров с юзерами.
...
Рейтинг: 0 / 0
Вывод полей при JOIN
    #39084215
Ы2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ClosiusМне надо делать запрос, чтобы вывести инфу маркеров и соотвествующих им пользователей после группировки по коду.
То есть я делаю группировку по коду и мне выдаются строки что у такого-то кода имеются столько то маркеров. Ок.

НО если кол-во = 1, то по id я должен получить список: маркер и связанный с ним юзер.
Вам не кажется, что у вас тут нестыковочка сформировалась? Нельзя по ходу выполнения запроса взять и пересмотреть список возвращаемых полей. Пишите функцию. Если понадобится, в ней можно будет сделать дополнительный запрос и любой набор возвращаемых полей упаковать, напр., в JSON. И пусть приложение гадает, что ему скормили на этот раз.
...
Рейтинг: 0 / 0
Вывод полей при JOIN
    #39084305
ursido
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ы2,

Не кажется. Товарищ однозначно это утверждает:
Код: sql
1.
HAVING COUNT(ROUND(("marker"."levels" / 10000000000000))) = 1;



Значит остается вывести список полей через агрегатную функцию. То есть для каждого поля написать что-то типа:
Код: sql
1.
MIN("marker"."id") AS "id"
...
Рейтинг: 0 / 0
Вывод полей при JOIN
    #39084958
Closius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ursido
Значит остается вывести список полей через агрегатную функцию. То есть для каждого поля написать что-то типа:
Код: sql
1.
MIN("marker"."id") AS "id"



А есть ли такая агрегатная функция, которая бы брала id и водила все поля из таблицы с этим id?
...
Рейтинг: 0 / 0
Вывод полей при JOIN
    #39084975
ursido
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Closius,

Попробуйте ответить на свой вопрос самостоятельно .
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вывод полей при JOIN
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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