Мне нужно отсортировать некоторую информацию, которая закодирована в следующей форме: ГТЕХ-ВЯ-2126-СМ-4КЛ1О У меня есть список этих идентификаторов, и я должен взять первые две строки, разделенные «-» (так, GTEX-VUSG), и подсчитать, сколько из каждого отдельного идентификатора я получаю.
Я использую следующий код 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
:
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 расширяет стандарт SQL, разрешая псевдонимы столбцов в предложении GROUP BY
. Это позволяет вам сделать что-то вроде:
SELECT SUBSTRING_INDEX(SAMPID,'-',2) AS SUBSAMPID, COUNT(*) AS CNT
FROM GTEX_Sample
GROUP BY SUBSAMPID
ORDER BY CNT DESC
У GMB есть правильный ответ.
Порядок также принимает позиционные параметры, такие как
SELECT SUBSTRING_INDEX (SAMPID, '-', 2), COUNT (*) ИЗ GTEX_Sample GROUP BYSUBSTRING_INDEX(SAMPID, '-',2) ORDER BY 2;