mysql - 如何按数字和字母顺序对数据进行排序取决于mysql中单个查询的条件

标签 mysql sorting

我有下表

表格

txt        id1   id2    id3 
Whistler    1    2      11
Slim        2    1      11
Fluffy     10    1      11
Buffy      20    1      11
Claws      3     1      11
Fang       11    1      11
Bowser     31    1      11
Edward      5    2      12
Puffball    8    2      12
Chirsy      9    2      12

当我写下面的查询时:它按“txt”列按字母顺序排序。

SELECT * FROM t 
WHERE id2=2
ORDER BY CASE   WHEN id2 = 2 THEN txt
                WHEN id2 = 1 THEN id1 
         END ASC ;

上面的查询给出的结果如下:

txt             id1   id2    id3 
Chirsy          9     2     12
Edward          5     2     12
Puffball        8     2     12
Whistler        1     2     11

现在,如果我想对数据进行数字排序,那么我写下面的查询。

 SELECT * FROM t 
 WHERE id2=1
 ORDER BY CASE  WHEN id2 = 2 THEN txt
               WHEN id2 = 1 THEN id1 
        END ASC ;

但是上面的查询给了我这样的结果:

txt      id1  id2  id3 
Fluffy   10    1    11
Fang     11    1    11
Slim     2     1    11
Buffy    20    1    11
Claws    3     1    11
Bowser   31    1    11

但是在上面的结果中 id1 列没有排序..为什么?

我想要上述查询的输出如下:

期望的输出:

txt     id1   id2   id3 
Slim     2     1    11
Claws    3     1    11
Fluffy   10    1    11
Fang     11    1    11
Buffy    20    1    11
Bowser   31    1    11

如何为此编写查询。

最佳答案

试试这个:

SELECT
  *
FROM t
WHERE id2 = 1
ORDER BY CASE
  WHEN id2 = 2 THEN txt
END ASC,
CASE
  WHEN id2 = 1 THEN id1
END ASC;

enter image description here

SELECT
  *
FROM t
WHERE id2 = 2
ORDER BY CASE
  WHEN id2 = 2 THEN txt
END ASC,
CASE
  WHEN id2 = 1 THEN id1
END ASC;

enter image description here

关于mysql - 如何按数字和字母顺序对数据进行排序取决于mysql中单个查询的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48277037/

相关文章:

sql - 谁能告诉我以下两个 mysql 语句中的逻辑错误在哪里?

php - 如何显示数据库中的类别和子类别

mysql - Foreach 字段中的数据在 MySQL 中将选定字段从一个数据库插入到另一个数据库

python - 如何对字符串和 int 值数组、按字母顺序和 "reversed"字母顺序的多个属性进行排序

c++ - 按长度合并排序字符串数组

mysql使用group by选择多个结果

php - 请帮助我使用 php trim 函数

javascript - 这个 JavaScript 数字比较函数实际上是如何工作的?

c++ - 排序函数如何作用于一对整数对的 vector ?

c - 为什么我的随机数组和排序程序不工作?