. script Rank MySQL
, . 2 CASE. , script 2 , Other. . 99999, .
, .
, SQL Fiddle.
Script:
CREATE TABLE screenwidth
(
id INT NOT NULL
, user_id INT NOT NULL
, screenwidth INT NOT NULL
);
INSERT INTO screenwidth (id, user_id, screenwidth) VALUES
(1, 1, 1366),
(2, 2, 1366),
(3, 2, 1366),
(4, 2, 1366),
(5, 3, 1366),
(6, 1, 1920),
(7, 2, 1920),
(8, 1, 1440),
(9, 2, 1440),
(10, 3, 1440),
(11, 4, 1440),
(12, 1, 1280),
(13, 1, 1024),
(14, 2, 1024),
(15, 3, 1024),
(16, 3, 1024),
(17, 3, 1024),
(18, 1, 1366);
SELECT screenwidth
, SUM(screenwidthcount) AS screenwidth_count
FROM
(
SELECT CASE
WHEN @curRank < 2 THEN screenwidth
ELSE 'Other'
END AS screenwidth
, screenwidthcount
, @curRank :=
( CASE
WHEN @curRank < 2 THEN @curRank + 1
ELSE 99999
END
) AS rank
FROM
(
SELECT screenwidth
, COUNT(DISTINCT user_id) AS screenwidthcount
FROM screenwidth
GROUP BY screenwidth
ORDER BY screenwidthcount DESC
) T1
, (SELECT @curRank := 0) r
) T2
GROUP BY screenwidth
ORDER BY rank;
:
SCREENWIDTH SCREENWIDTH_COUNT
----------- -----------------
1440 4
1024 3
Other 6