php - 按频率对 SQL 查询记录排序

标签 php mysql sql

有什么方法可以根据某个值在列中出现的频率来对您从 SQL 查询中选择的记录进行排序吗?例如:如果有五个记录 where column = 'value1',三个 where column = 'value2',两个 where column = 'value3',有没有办法让结果先显示 'value1',然后显示 'value2' , 最后是 'value3'?

最佳答案

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`));
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO `table` (`column`) VALUES ('value1'), ('value1'), ('value1'), ('value1'), ('value1'), ('value2'), ('value2'), ('value2'), ('value3'), ('value3');
Query OK, 10 rows affected (0.00 sec)
Records: 10  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM `table`;
+----+--------+
| id | column |
+----+--------+
|  1 | value1 |
|  2 | value1 |
|  3 | value1 |
|  4 | value1 |
|  5 | value1 |
|  6 | value2 |
|  7 | value2 |
|  8 | value2 |
|  9 | value3 |
| 10 | value3 |
+----+--------+
10 rows in set (0.00 sec)

mysql> SELECT   `column`,
    ->          COUNT(`column`) AS `count`
    -> FROM     `table`
    -> GROUP BY `column`
    -> ORDER BY `count` DESC;
+--------+-------+
| column | count |
+--------+-------+
| value1 |     5 |
| value2 |     3 |
| value3 |     2 |
+--------+-------+
3 rows in set (0.00 sec)

关于php - 按频率对 SQL 查询记录排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8467997/

相关文章:

php - 是否可以在没有 MySQL 的情况下制作功能齐全的购物车

php - 使用 AJAX 或 jQuery 和 PHP 填充文本字段的动态选择框

php - 一个简单的随机生成器

php - 我无法在 MySQL 5.5 中添加 'null' 值

mysql - 左连接的更新查询不起作用

mysql - 选择数据间隔

PHP json_decode 深度参数不起作用

sql - 使用一个 "primary"值实现多对多

mysql - 我们可以为 mysql 和某些特定数据库保留相同的密码吗?

mysql - 结合图形数据库和 RDBMS