Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Ступор в построении запроса / 11 сообщений из 11, страница 1 из 1
28.07.2019, 11:22
    #39842273
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ступор в построении запроса
Всем привет, базы не мой основной профиль, застрял на одном вопросе, предполагаю что все должно быть просто но никак не соберусь с мыслями чтобы реализовать.

Допустим есть
Код: sql
1.
CREATE TABLE gifts(sender varchar, recipient varchar, text varchar)


Мне нужно сгруппировать данные таким образом, чтобы узнать какая пара между собой сделала больше всего подарков, т.е. мне надо sum(*) where a.sender = b.recipient or a.recipient = b.sender

Я написал набрсоок поделки, но он нещадно тупит.
Код: sql
1.
select count(*), a.recipient as rec, a.sender as sen from (select sender, recipient from gifts) as a,(select sender, recipient from gifts) as b where a.sender = b.recipient or a.recipient = b.sender group by rec,sen order by 1


Так вот, может кто знает как правильно называются такие запросы, я даже сформулировать нормально не могу, чтобы погуглить. Буду рад любой помощи(а работающему запросу безмерно рад)
...
Рейтинг: 0 / 0
28.07.2019, 11:23
    #39842275
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ступор в построении запроса
база Postgres, количество записей пока полмиллиона, медленно растет, но не сильно, это данные где-то за 10 лет
...
Рейтинг: 0 / 0
28.07.2019, 12:23
    #39842286
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ступор в построении запроса
Код: sql
1.
group by min(sender,recipient), mах(sender,recipient)


Не помню точно название функции, но идею ты должен понять.
...
Рейтинг: 0 / 0
28.07.2019, 12:29
    #39842287
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ступор в построении запроса
Вспомнил
Код: sql
1.
group by LEAST(sender,recipient), GREATEST(sender,recipient)
...
Рейтинг: 0 / 0
28.07.2019, 12:31
    #39842288
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ступор в построении запроса
Не знаю, используются ли они для нечисловых переменных.
...
Рейтинг: 0 / 0
28.07.2019, 12:51
    #39842289
ChA
ChA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ступор в построении запроса
Навскидку как-то так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
CREATE TABLE gifts(sender varchar, recipient varchar)
INSERT INTO gifts (sender, recipient)
VALUES
(1, 2)
,(1, 3)
, (1, 4)
, (2, 3)
, (3, 1)
, (3, 4)
, (3, 2)

SELECT
	[One]
	, [Two]
	, COUNT(*) AS N
FROM (
SELECT
	sender AS [One]
	, recipient AS [Two]
FROM gifts
UNION ALL
SELECT
	recipient AS [One]
	, sender AS [Two]
FROM gifts
) t
WHERE [One] > [Two]
GROUP BY [One], [Two]
ORDER BY N DESC

DROP TABLE gifts
...
Рейтинг: 0 / 0
28.07.2019, 13:10
    #39842290
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ступор в построении запроса
Спасибо ребята, все взлетело. А я 3 часа никак не мог сообразить)
...
Рейтинг: 0 / 0
28.07.2019, 14:01
    #39842298
vadiminfo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ступор в построении запроса
select * from
(
select sender, resipient, cnt, max(cnt) over () m
from
(
select sender, resipient, count(*) cnt from gifts
group by sender, resipient
)
)
where cnt = m
...
Рейтинг: 0 / 0
28.07.2019, 14:07
    #39842300
vadiminfo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ступор в построении запроса
В догонку.
Запрос проверен в Оракле. Но Постгри вроде имеет родственный язык БД.
Запрос вернет несколько записей, если несколько пар сделали больше всего подарков, но совпадают между собой. Например, несли наибольшее число 10. И две пары сделали по 10, то оде окажутся в результате.
Запрос имеет и аналитическую ф-ю и групповую. Но они обе для аналитических отчетов.
...
Рейтинг: 0 / 0
28.07.2019, 14:10
    #39842303
vadiminfo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ступор в построении запроса
вдогонку.
На основном компе буфер обмена с браузером не работает (Вин 10), на втором не все клавиши нажимаются. Поэтому один ответ пришлось разбить на два.
...
Рейтинг: 0 / 0
28.07.2019, 14:19
    #39842306
vadiminfo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ступор в построении запроса
нашел что подкрутить чтобы буфер заработал. Не совсем как бы очевидно: пришлось включить журнал буфера обмена. Ну не гады они там?
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Ступор в построении запроса / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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