Mysql
獲取行的排名
我正在使用
mysql Ver 14.14 Distrib 5.7.21, for Linux (x86_64)
.我有一個表推薦:
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`) );
在表格中,您基本上插入了人和推薦人。
我創建了以下排行榜:
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;
這給了我:
但是,我想得到:
我使用 faker php 外掛創建了以下dbfiddle 。
我嘗試使用 mysql
RANK()
功能。但是,我正在努力如何正確使用它。感謝您的回复!
您可以嘗試:
select referred_by, referred_by_count, @rank := @rank+1 from ( select referred_by, count(referred_by) as referred_by_count from referrals r group by referred_by order by referred_by_count DESC, referred_by ) as t cross join ( select @Rank := 0 ) o order by referred_by_count desc, referred_by;
但我不認為結果是確定性的。RANK() 是 BTW 一個存在於 MySQL 8+ 中的視窗函式。如果可能升級到更新版本的 MySQL,濫用上述變數可能會在您的應用程序中引入神秘的錯誤