@Seilordp

Sql-запрос — как вывести активных рефералов?

Добрый день! Прошу помощи, так как сам такой запрос решить не могу.

Есть таблица вида:
| id | name | param1 | param2 | param 3 | ref_id |

Так вот, нужно вывести имена по убыванию количества активных рефералов, считаются, те у кого param1 + param 2 + param 3 > 5, а также в ref_id стоит id данного человека.

Заранее спасибо.
  • Вопрос задан
  • 2788 просмотров
Решения вопроса 1
Sander_Li
@Sander_Li
Backend developer
Для всех рефов
SELECT `t1`.`id`, `t1`.`name`, COUNT(`t2`.`id`) AS cnt 
FROM `table` as `t1`
LEFT JOIN `table` `t2` ON `t1`.`id` = `t2`.`ref_id`
WHERE (`t1`.`param1` + `t1`.`param2` + `t1`.`param3`) > 5 
GROUP BY `t1`.`id`
ORDER BY cnt DESC


Для рефов с param1 + param 2 + param 3 > 5

SELECT `t1`.`id`, `t1`.`name`, COUNT(`t2`.`id`) AS cnt 
FROM `table` as `t1` 
LEFT JOIN `table` `t2` ON `t1`.`id` = `t2`.`ref_id` 
AND (`t2`.`param1` + `t2`.`param2` + `t2`.`param3`) > 5 
WHERE (`t1`.`param1` + `t1`.`param2` + `t1`.`param3`) > 5 
GROUP BY `t1`.`id` ORDER BY cnt DESC
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
select name from table 
where sum(param1+param2+param3)>5 as s 
  and ref_id = 'id данного человека'
order by s desc
Ответ написан
Sander_Li
@Sander_Li
Backend developer
SELECT `name`,  (`param1` + `param2` + `param3`) AS s FROM `table` WHERE `ref_id` = 5 HAVING s > 5 ORDER BY s DESC
Ответ написан
WITH CTE (name, summa,ref_id)
AS
(
    SELECT name, param1+param2+param3, ref_id
    FROM table1    
)

SELECT name
FROM CTE
where summa>5 
  and ref_id = 1
order by summa desc


Вот тут запрос
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы