【发布时间】:2011-01-23 02:24:50
【问题描述】:
是否可以对 mySQL 中的 2 行计算进行排序?例如,我有 2 行,lp 和 ap 我正在尝试做这样的事情:
SELECT * from myTbl WHERE 1 ORDER BY (lp/ap)
这不会引发错误,但也不会按计算结果排序。有没有办法做到这一点,还是我必须将 lp/ap 存储在数据库中?
【问题讨论】:
-
lp和ap是行还是列?
是否可以对 mySQL 中的 2 行计算进行排序?例如,我有 2 行,lp 和 ap 我正在尝试做这样的事情:
SELECT * from myTbl WHERE 1 ORDER BY (lp/ap)
这不会引发错误,但也不会按计算结果排序。有没有办法做到这一点,还是我必须将 lp/ap 存储在数据库中?
【问题讨论】:
lp 和 ap 是行还是列?
是的,这是可能的,而且确实有效。查看以下测试:
CREATE TABLE a(a INT, b INT);
INSERT INTO a VALUES (1, 1);
INSERT INTO a VALUES (1, 2);
INSERT INTO a VALUES (1, 3);
INSERT INTO a VALUES (1, 4);
INSERT INTO a VALUES (1, 5);
INSERT INTO a VALUES (1, 6);
INSERT INTO a VALUES (2, 1);
INSERT INTO a VALUES (2, 2);
INSERT INTO a VALUES (2, 3);
INSERT INTO a VALUES (2, 4);
INSERT INTO a VALUES (2, 5);
INSERT INTO a VALUES (2, 6);
SELECT a.a, a.b, (a/b) FROM a ORDER BY (a/b);
+------+------+--------+
| a | b | (a/b) |
+------+------+--------+
| 1 | 6 | 0.1667 |
| 1 | 5 | 0.2000 |
| 1 | 4 | 0.2500 |
| 2 | 6 | 0.3333 |
| 1 | 3 | 0.3333 |
| 2 | 5 | 0.4000 |
| 1 | 2 | 0.5000 |
| 2 | 4 | 0.5000 |
| 2 | 3 | 0.6667 |
| 2 | 2 | 1.0000 |
| 1 | 1 | 1.0000 |
| 2 | 1 | 2.0000 |
+------+------+--------+
SELECT a.a, a.b FROM a ORDER BY (a/b); 将返回相同的结果。
【讨论】:
SELECT *, (lp/ap) AS calculation from myTbl ORDER BY calculation
只要 (lp/ap) 有效,这应该可以解决问题。
【讨论】:
你可能会有更多的机会去做
SELECT *, (lp/ap) as n from myTbl ORDER BY n
【讨论】: