﻿CREATE FUNCTION [dbo].[API_KnokserRanks]
(
	@userId bigint
)
RETURNS @rankFactors TABLE
(
	RankId int,
	Code nchar(10),
	Measure DECIMAL (22, 8)
)
AS
BEGIN
	DECLARE @HasTechnical int, @HasFundamental int, @Successes int, @Published int, @Purchasers int, @Reknoks int , @Followers int, @DistTarget DECIMAL (22, 8), @Profit DECIMAL (22, 8)

	Select 
		@HasTechnical = Count(k.HasTechnical), 
		@HasFundamental = Count(k.HasFundamental), 
		@Successes = Count( s.HasResult),
		@Published = Count(case when s.IsPublished = 1 then 1 ELSE NULL END), 
		@Purchasers = Count(distinct p.UserId ), 
		@Reknoks = 0, 
		@Followers = Count(follows.UserId), 
		@DistTarget = AVG(case when s.HasResult = 1 then k.DistanceFromTarget ELSE NULL END),
		@Profit = AVG(k.PotentialProfitValue)
		from Users u 
		left join Signals k on k.CreatorUserId = u.UserId
		left join [dbo].[UserKnoks] p on p.KnokId=k.KnokId
		left join [dbo].[UserFollows] follows on follows.FollowUserId=follows.UserId
		left join [dbo]._KnokStatuses s on s.KnokStatusId = k.KnokStatusId
		WHERE u.UserId = @userId
		group by u.UserId
	INSERT @rankFactors (RankId, Code, Measure)	VALUES
	(2, 'HasTA', @HasTechnical),
	(2, 'HasFA', @HasFundamental),
	(2, 'Successes', @Successes),
	(2, 'Published', @Published),
	(2, 'Purchasers', @Purchasers),
	(2, 'Reknoks', @Reknoks),
	(2, 'Followers', @Followers),
	(2, 'DistTarget', @DistTarget),
	(2, 'Profit', @Profit)
	RETURN
END
