【问题标题】:How do I sort by a new generated column in mySQL?如何按 mySQL 中新生成的列排序?
【发布时间】:2021-03-25 13:38:21
【问题描述】:

我必须对一些按以下形式编码的信息进行排序: GTEX-VJYA-2126-SM-4KL1O 我有一个这个 ID 的列表,我必须取前两个用 '-' 分隔的字符串(所以,GTEX-VUSG),然后计算我最终得到的每个不同 ID 的数量。

我正在使用以下 MySQL 代码:

mysql> SELECT SUBSTRING_INDEX(SAMPID,'-',2), COUNT(*) FROM GTEX_Sample GROUP BYSUBSTRING_INDEX(SAMPID, '-',2);

我得到以下结果:

| GTEX-ZXG5                     |       21 |
| GTEX-ZY6K                     |       19 |
| GTEX-ZYFC                     |       20 |
| GTEX-ZYFD                     |       19 |
| GTEX-ZYFG                     |       25 |
| GTEX-ZYT6                     |       26 |
| GTEX-ZYVF                     |       20 |
| GTEX-ZYW4                     |       20 |
| GTEX-ZYWO                     |       25 |
| GTEX-ZYY3                     |       21 |
| GTEX-ZZ64                     |       20 |
| GTEX-ZZPT                     |       12 |
| GTEX-ZZPU                     |       23 |
| K-562                         |      217

现在我需要按新生成的列(第二个)对结果进行排序,但由于是新列,我不知道如何使用“order by”命令。有什么办法吗?

【问题讨论】:

    标签: mysql sql count sql-order-by aggregate-functions


    【解决方案1】:

    只需重复ORDER BY 子句中的表达式:

    SELECT SUBSTRING_INDEX(SAMPID,'-',2), COUNT(*) 
    FROM GTEX_Sample 
    GROUP BY SUBSTRING_INDEX(SAMPID, '-',2) 
    ORDER BY COUNT(*) DESC
    

    您还可以在SELECT 子句中为该列设置别名,并使用它进行排序:

    SELECT SUBSTRING_INDEX(SAMPID,'-',2), COUNT(*) AS CNT
    FROM GTEX_Sample 
    GROUP BY SUBSTRING_INDEX(SAMPID, '-',2) 
    ORDER BY CNT DESC
    

    请注意,MySQL 通过在 GROUP BY 子句中允许列别名来扩展 SQL 标准。这使您可以执行以下操作:

    SELECT SUBSTRING_INDEX(SAMPID,'-',2) AS SUBSAMPID, COUNT(*) AS CNT
    FROM GTEX_Sample 
    GROUP BY SUBSAMPID 
    ORDER BY CNT DESC
    

    【讨论】:

      【解决方案2】:

      GMB 有正确的答案。

      Order by 也采用位置参数,例如

      SELECT SUBSTRING_INDEX(SAMPID,'-',2), COUNT(*) FROM GTEX_Sample GROUP BYSUBSTRING_INDEX(SAMPID, '-',2) 按 2 排序;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多