반응형
가중치 있는 액션과 시간 감소를 기준으로 사용자의 순위를 매기기 위해 SQL 쿼리를 작성하는 방법은 무엇입니까?
사용자의 순위를 매기기 위해 사용하고 싶은 액션(A와 B)이 2개 있습니다.
두 작업 모두 시간이 경과함에 따라 선형적으로 값을 "잃어버립니다".
액션 A: 중량 60 %
액션 B: 무게 40 %
점수 = SUM [액션 무게 * 1000000 / (현재 타임스탬프 - 액션 타임스탬프)]
사용자의 작업이 포함된 MySQL 테이블
user_id | action | timestamp
1 | A | 1524428013410
1 | B | 1525431531237
2 | B | 1525578131563
가장 높은 점수를 받은 사용자는 랭킹 상위권에 있어야 합니다.
성능 SQL 쿼리를 작성하여 사용자의 점수를 계산하는 방법은 무엇입니까?
쿼리 출력은 다음 형식이어야 합니다.
user_id | score
1 | 0.92830
2 | 0.76382
(상기 예의 점수는 필요한 출력 포맷의 플레이스 홀더일 뿐입니다).
감사합니다!
내가 제대로 이해한다면 넌 평범한 사람이 필요해GROUP BY
.넌 할 수 있다.JOIN
무게사용하다ORDER BY
정렬할 수 있습니다.테이블이 호출된 경우action_user
.
SELECT au.`user_id`,
sum(a.`weight` / (current_timestamp() - au.`timestamp`)) `score`
FROM `action_user` au
INNER JOIN (SELECT 'A' `action`,
.6 `weight`
UNION ALL
SELECT 'B' `action`,
.4 `weight`) a
ON a.`action` = au.`action`
GROUP BY au.`user_id`
ORDER BY 2 DESC;
공식은 잘 모르겠지만아주 적은 숫자입니다.필요에 따라 변경할 수도 있습니다.
다음과 같은 경우:
SELECT
user_id,
sum( IF(a.`action` = 'a', 0.6, 0.4) * 1000 / TIMESTAMPDIFF(second, a.timestamp, now()) ),
FROM actions a
group by user_id
언급URL : https://stackoverflow.com/questions/50196110/how-to-write-a-sql-query-to-rank-users-based-on-weighted-actions-and-time-decay
반응형
'source' 카테고리의 다른 글
Python: 목록에서 처음 10개의 결과를 가져옵니다. (0) | 2022.09.13 |
---|---|
mysql 워크벤치에서 데이터베이스를 내보낼 수 없습니다. (0) | 2022.09.13 |
BitTorrent: 다운로드가 시작되지 않음 (0) | 2022.09.13 |
MaxScale을 통한 애플리케이션 접속 실패 (0) | 2022.09.13 |
PHP에서 점 3개(...)의 의미는 무엇입니까? (0) | 2022.09.13 |