Как выбрать пару идентификаторов пользователей, у которых есть как минимум 3 проверенных идентификатора продукта с оценкой продукта не менее 4/5 в sql

У меня есть такой набор данных:

Логин пользователяКод товарасчет
А14
А24
А35
Б14
Б24
Б35

Я хочу иметь такой вывод:

идентификатор пользователя1идентификатор пользователя2match_product
АБ1 2 3

но я могу получить только первые два столбца с этим запросом:

CREATE TABLE score_greater_than_3 AS
SELECT userid, productid, score
FROM reviews
WHERE score >= 4;

SELECT s1.userid as userid1, s2.userid as userid2
FROM score_greater_than_3 s1 
INNER JOIN score_greater_than_3 s2 ON s1.productid=s2.productid AND s1.userid<s2.userid
GROUP BY s1.userid, s2.userid
HAVING count(*)>=3;

Как я могу получить соответствующие продукты? я тоже согласен с таким выводом, если это проще

пользователь1пользователь2соответствующий продукт
аб1
аб2
аб3
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
29
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Пожалуйста, попробуйте это:

select s1.userid as userid1, s2.userid as userid2, 
GROUP_CONCAT(s1.productid) 
from score_greater_than_3 s1 inner join score_greater_than_3 s2 on s1.productid=s2.productid and s1.userid<s2.userid
group by s1.userid, s2.userid;

Весь скрипт смотрите: БД рабочий пример

это идеально, но также выбираются пары, которые имеют менее 3-х общих продуктов

Claudio V 17.05.2022 02:46
Ответ принят как подходящий

Вы можете попробовать со следующим запросом:

WITH cte AS (
    SELECT r.userid,
           r.productid
    FROM reviews r
    WHERE r.score > 3
)
SELECT r1.userid,
       r2.userid,
       GROUP_CONCAT(r1.productid SEPARATOR ' ')       
FROM       cte r1
INNER JOIN cte r2
        ON r1.productid = r2.productid
       AND r1.userid < r2.userid
GROUP BY r1.userid,
         r2.userid
HAVING COUNT(*) >= 3

Он использует Общее табличное выражение, который позволяет вам размещать вашу таблицу во временном пространстве, которое длится до конца запроса. Ваш следующий шаг с использованием самообъединения правильный, хотя в нем отсутствует функция агрегирования GROUP_CONCAT, которая позволяет выполнять агрегирование по строковому полю. Вы можете установить параметр «разделитель», чтобы решить, какую строку вы хотите использовать для объединения ваших значений.

Попробуйте полный запрос здесь.

спасибо! работает очень хорошо! также спасибо за форматирование моего сообщения :)

Claudio V 17.05.2022 02:49

Другие вопросы по теме