MySQL 按子字符串出现次数排序

标签 mysql group-by sql-order-by substring

示例表:

ID Name
1  Apple: Color: Yellow
2  Apple: Color: Red
3  Grapes: Color: Green
4  Grapes: Color: Green
5  Oranges: Color: Orange
6  Apple: Color: Yellow
7  Apple: Color: Yellow

我需要按水果数量降序排列,而不看颜色。我知道 table 可能会根据水果和颜色进行划分,但那是另一回事了。

结果应该是这样的,按子字符串的计数排序,“第一个之前的所有内容:”

ID Name
1  Apple: Color: Yellow
2  Apple: Color: Red
6  Apple: Color: Yellow
7  Apple: Color: Yellow
3  Grapes: Color: Green
4  Grapes: Color: Green
5  Oranges: Color: Orange

是否可以在 mysql 中进行排序,还是需要在 PHP f.ex 中进行排序?

最佳答案

mysql> SELECT e.* FROM example AS e 
JOIN (
  SELECT SUBSTRING_INDEX(name, ':', 1) AS fruit, count(*) AS count
  FROM example 
  GROUP BY fruit) AS x 
    ON SUBSTRING_INDEX(e.name, ':', 1) = x.fruit 
ORDER BY x.count DESC, e.id;

+----+------------------------+
| id | name                   |
+----+------------------------+
|  1 | Apple: Color: Yellow   |
|  2 | Apple: Color: Red      |
|  6 | Apple: Color: Yellow   |
|  7 | Apple: Color: Yellow   |
|  3 | Grapes: Color: Green   |
|  4 | Grapes: Color: Green   |
|  5 | Oranges: Color: Orange |
+----+------------------------+

关于MySQL 按子字符串出现次数排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26414637/

相关文章:

JPA 1.0 @OrderBy 使用字段名称与 JPA 2.0 @OrderColumn 使用列名称

sql - 带有 CASE 语句的特殊 ORDER BY - 需要指导

mysql - mysql创建触发器语法错误

php - MediaWiki 发出警告

python - 使用条件在 python pandas 中进行内部连接

MySQL - 如何计算 AVG ON SUM?

sql - 按某些列排序,在 MySQL 中也按 rand() 排序

php - 如何从多维数组制作一个好的 html 演示表?

PHP脚本将mysql表数据导出到csv,从某些列转义数据并将字符串映射到数组?

sql-server - 如何在 sql-server (2005) 中限制 GROUP BY 子句的答案