estou usando mysql Ver 14.14 Distrib 5.7.21, for Linux (x86_64)
.
Estou tendo uma referência de tabela:
CREATE TABLE `referrals` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`referred_by` bigint(20) unsigned DEFAULT NULL,
`referral_token` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`email` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `referrals_email_unique` (`email`)
);
Na tabela você basicamente insere a pessoa e quem a encaminhou.
Criei a seguinte tabela de classificação:
select
referred_by,
count(referred_by) as referred_by_count,
@curRank := @curRank + 1 AS rank
from
referrals r,
(
SELECT
@curRank := 0) o
group by
referred_by
order by
referred_by_count DESC;
Isso me dá:
referido por | refer_by_count | classificação |
---|---|---|
10 | 3 | 3 |
2 | 2 | 1 |
3 | 2 | 2 |
13 | 2 | 5 |
11 | 2 | 6 |
15 | 1 | 8 |
12 | 1 | 9 |
4 | 1 | 4 |
9 | 1 | 7 |
No entanto, gostaria de obter:
referido por | refer_by_count | classificação |
---|---|---|
10 | 3 | 1 |
2 | 2 | 2 |
3 | 2 | 3 |
13 | 2 | 4 |
11 | 2 | 5 |
15 | 1 | 6 |
12 | 1 | 7 |
4 | 1 | 8 |
9 | 1 | 9 |
Eu criei o seguinte dbfiddle usando o plugin faker php.
Eu tentei usar a RANK()
função mysql. No entanto, estou lutando como usá-lo corretamente.
Eu aprecio suas respostas!