MySQL 基于列值的查询
MySQL query based on column value
我正在尝试根据不同列中的值对一行进行排序,老实说,我不知道如何正确解释这一点,所以我将展示一个示例。
我正在尝试创建一个查询,该查询根据值对失败进行排序,例如 SELECT * from table WHERE id='1' order by Failure1 asc,Failure2 asc,Failure3 asc
我希望查询将其显示为结果。
ID Failure2 Failure3 Failure1
1 5636 123 22
示例table
ID Failure1 Failure2 Failure3
1 22 5636 123
2 33 148 22
3 1 101 11
4 33 959 55
这有点困难,因为您正在做的是动态地重新排序您的列。我能想到的唯一方法是将每一列作为 CASE 语句。虽然它不会很漂亮或高效:
SELECT
CASE
WHEN (Failure1 > Failure2 AND Failure1 > Failure3) THEN Failure1
WHEN (Failure2 > Failure1 AND Failure2 > Failure3) THEN Failure2
WHEN (Failure3 > Failure1 AND Failure3 > Failure2) THEN Failure3
END,
--repeat Case for second and third column
FROM
Failures
WHERE
ID = 1
此外,仔细检查您是否可以在 WHEN() 中执行 AND 逻辑。 90% 确定你可以,但最坏的情况是,你需要扩展 WHEN。
此外,@MatBailie 是对的;这通常是在表示层上完成的,而不是通过 SQL 查询。 SQL 在这种逻辑上并不是最好的,而表示层是为它构建的。
我正在尝试根据不同列中的值对一行进行排序,老实说,我不知道如何正确解释这一点,所以我将展示一个示例。
我正在尝试创建一个查询,该查询根据值对失败进行排序,例如 SELECT * from table WHERE id='1' order by Failure1 asc,Failure2 asc,Failure3 asc
我希望查询将其显示为结果。
ID Failure2 Failure3 Failure1
1 5636 123 22
示例table
ID Failure1 Failure2 Failure3
1 22 5636 123
2 33 148 22
3 1 101 11
4 33 959 55
这有点困难,因为您正在做的是动态地重新排序您的列。我能想到的唯一方法是将每一列作为 CASE 语句。虽然它不会很漂亮或高效:
SELECT
CASE
WHEN (Failure1 > Failure2 AND Failure1 > Failure3) THEN Failure1
WHEN (Failure2 > Failure1 AND Failure2 > Failure3) THEN Failure2
WHEN (Failure3 > Failure1 AND Failure3 > Failure2) THEN Failure3
END,
--repeat Case for second and third column
FROM
Failures
WHERE
ID = 1
此外,仔细检查您是否可以在 WHEN() 中执行 AND 逻辑。 90% 确定你可以,但最坏的情况是,你需要扩展 WHEN。
此外,@MatBailie 是对的;这通常是在表示层上完成的,而不是通过 SQL 查询。 SQL 在这种逻辑上并不是最好的,而表示层是为它构建的。