Заказывать записи запросов SQL по частоте

Есть ли способ заказать записи, которые вы выбираете из SQL-запроса, тем, как часто в столбце появляется определенное значение? Например: если есть пять записей, где column = 'value1', три, где column = 'value2', а два, где column = 'value3', есть способ сделать результаты сначала отображать «value1», затем «value2», , и, наконец, «значение3»?

SELECT `column`, COUNT(`column`) AS `count` FROM `table` GROUP BY `column` ORDER BY `count` DESC 

Быстрый PoC:

 mysql> CREATE TABLE `table` (` id` SERIAL, `column` char (6) NOT NULL, KEY` column_idx` (`column`));
 Запрос ОК, 0 строк затронуты (0,01 сек)

 mysql> INSERT INTO `table` (` column`) VALUES ('value1'), ('value1'), ('value1'), ('value1'), ('value1'), ('value2'), ( 'value2'), ('value2'), ('value3'), ('value3');
 Query OK, 10 строк, затронутых (0.00 сек)
 Записи: 10 Дубликаты: 0 Предупреждения: 0

 mysql> SELECT * FROM `table`;
 + ---- + -------- +
 |  id |  столбец |
 + ---- + -------- +
 |  1 |  value1 |
 |  2 |  value1 |
 |  3 |  value1 |
 |  4 |  value1 |
 |  5 |  value1 |
 |  6 |  value2 |
 |  7 |  value2 |
 |  8 |  value2 |
 |  9 |  значение3 |
 |  10 |  значение3 |
 + ---- + -------- +
 10 строк в наборе (0,00 сек)

 mysql> SELECT `column`,
     -> COUNT (`column`) AS` count`
     -> FROM `table`
     -> GROUP BY `column`
     -> ORDER BY `count` DESC;
 + -------- + ------- +
 |  столбец |  счет |
 + -------- + ------- +
 |  value1 |  5 |
 |  value2 |  3 |
 |  значение3 |  2 |
 + -------- + ------- +
 3 ряда в наборе (0,00 сек)

Предполагая, что вам нужны все строки, но упорядоченные по частоте значений в некотором столбце `col` , вы можете сделать это:

 CREATE TABLE tbl (id SERIAL, col VARCHAR(16)); -- INSERT so that `id` does not match frequency of values under `col` INSERT INTO tbl (col) VALUES ('value1'), ('value2'), ('value3'), ('value1'), ('value2'), ('value3'), ('value1'), ('value2'), ('value1'), ('value1'); SELECT id, tbl.col FROM tbl INNER JOIN ( SELECT col, COUNT(1) AS freq FROM tbl GROUP BY 1) derived USING (col) ORDER BY derived.freq DESC; 

который будет производить

 +----+--------+ | id | col | +----+--------+ | 4 | value1 | <-- highest incidence | 7 | value1 | | 1 | value1 | | 9 | value1 | | 10 | value1 | | 5 | value2 | | 8 | value2 | | 2 | value2 | | 6 | value3 | <-- lowest incidence | 3 | value3 | +----+--------+ 10 rows in set (0.00 sec)