/ / समग्र (गणना) द्वारा रैंकिंग क्वेरी परिणाम - mysql, शामिल हों, कुल-कार्य

कुल (गणना) द्वारा रैंकिंग क्वेरी के परिणाम - mysql, सम्मिलित हों, कुल-कार्य

मैं एक समग्र कार्य द्वारा क्रमबद्ध मान प्राप्त करने की कोशिश कर रहा हूं - और मुझे यह देखना पसंद है कि क्या यह MySQL क्वेरी के भीतर किया जा सकता है (बजाय क्वेरी कॉल करने वाले ORM के बजाय)।

मेरे पास तालिका और डेटा कुछ इस तरह है:

CREATE TABLE `interactions` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`account` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;

INSERT INTO `interactions` VALUES
(1, "xyz", "2017-01-01 00:05:01"),
(2, "xyz", "2017-01-01 00:05:10"),
(3, "abc", "2017-01-01 00:05:21"),
(4, "xyz", "2017-01-01 00:05:43"),
(5, "def", "2017-01-01 00:05:47"),
(6, "xyz", "2017-01-01 00:05:49"),
(7, "abc", "2017-01-01 00:05:50"),
(8, "abc", "2017-01-01 00:05:59");

अब तक मेरे पास है:

set @curRank := 0;

select
@curRank := @curRank + 1 AS rank,
der.account,
der.searches
from
interactions
right join
(select account, count(id) AS searches from interactions group by account order by searches) AS der
on
der.account = interactions.account;

लेकिन यह हर खाते (सही के साथ) को आउटपुट करता है searches मूल्य - लेकिन एक से अधिक बार रैंक किया गया):

 1    abc        3
2    abc        3
3    abc        3
4    def        1
5    xyz        4
6    xyz        4
7    xyz        4
8    xyz        4

मैं देख रहा हूँ:

 1    abc        3
2    def        1
3    xyz        4

मुझे यह उल्लेख करना चाहिए कि मैं संयुक्त रैंकों के बारे में परवाह नहीं करता हूं - यदि दो खाते तालिका में एक ही गणना के साथ समाप्त होते हैं, तो यह नहीं होता है कि क्या वे एक के बाद एक स्थान पर हैं (या क्या आदेश)।

उत्तर:

जवाब के लिए 0 № 1

चयन में एक DISTINCT जोड़कर क्वेरी को ठीक करता है:

set @curRank := 0;

select distinct
der.account,
der.searches,
@curRank := @curRank + 1 AS rank
from
interactions
right join
(select account, count(id) AS searches from interactions group by account order by searches) AS der
on
der.account = interactions.account;