想象一下在线调查中的两个问题:
结果存储在mysql db列" q1" 1 表示是或 0 表示否
结果存储在mysql db列" q2" 1 表示是或 0 表示否
想象一下以下SELECT语句:
SELECT SUM(q1) AS q1Sum, SUM(q2) AS q2Sum FROM myTable
假设q1Sum = 10且q2Sum = 12。当前的SELECT语句将返回:
+-------+-------+
| q1Sum | q2Sum |
+-------+-------+
| 10 | 12 |
+-------+-------+
但是是否可以返回不同的列顺序,以便最大的SUM始终是返回的第一列而不更改SELECT语句中的列表顺序?
SELECT SUM(q1) AS q1Sum, SUM(q2) AS q2Sum FROM myTable << something else >>
+-------+-------+
| q2Sum | q1Sum |
+-------+-------+
| 12 | 10 |
+-------+-------+
如果q1Sum大于q2Sum,则返回的列顺序将恢复为原始顺序。
为什么我会问这个问题?
答案 0 :(得分:0)
假设我正确理解您的问题,您可以使用case
声明:
SELECT CASE WHEN SUM(q1) > SUM(q2) THEN SUM(q1) ELSE SUM(q2) END AS q1Sum,
CASE WHEN SUM(q1) > SUM(q2) THEN SUM(q2) ELSE SUM(q1) END AS q2Sum
FROM myTable
实际上这会错误地标记列 - 您不能在不使用dynamic sql
的情况下更改列的名称。
答案 1 :(得分:0)
感谢@ user2864740和@sgeddes的快速回复。
调查SAYS:在不使用动态sql的情况下,无法使用mysql对SELECT语句中的返回列进行排序。
我提出的解决方案使用临时表,类似于下面的示例。虽然可能不太理想,但它回答了我需要的邮件。好奇如果有更好的方法来做同样的事情或者我搞砸了下面的任何其他事情。
DROP TEMPORARY TABLE IF EXISTS orderedSums;
SET @q1Sum = (SELECT SUM(q1) FROM myTable);
SET @q2Sum = (SELECT SUM(q2) FROM myTable);
CREATE TEMPORARY TABLE orderedSums (
qNum VARCHAR(5),
qSum INT
);
INSERT INTO orderedSums
VALUES ('q1Sum', @q1Sum),('q2Sum', @q2Sum);
SELECT qNum, qSum
FROM orderedSums
ORDER BY qSum DESC;
返回从myTable按降序排序的多行SUM。