是否可以对mysql SELECT语句中返回列的顺序进行排序?

时间:2016-01-04 00:44:54

标签: mysql database sorting

想象一下在线调查中的两个问题:

  1. 你喜欢苹果吗?
  2.   

    结果存储在mysql db列" q1" 1 表示是或 0 表示否

    1. 你喜欢橘子吗?
    2.   

      结果存储在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,则返回的列顺序将恢复为原始顺序。

      为什么我会问这个问题?

      1. 我从类似于上面的调查中继承了一个包含多列的大表,其中Yes = 1且No = 0回答多个问题。我假设正确的方法是创建保存SUM值的变量并将它们插入临时表行,然后选择/排序返回的行。但是,这并没有真正回答这样一个问题:是否可以对返回的列进行排序&#39;并且我甚至不确定我的假设是否正确,这是正确的做法&#39; ...
      2. 虽然我知道如何对结果进行排序,无论顺序如何(在我的情况下使用php),我很好奇是否有办法在mysql中自动排序返回的列,以便最高值始终是第一列并且剩余列中的SUM-ed结果以数字形式减少返回的剩余列。
      3. 好奇,如果有一个优雅的答案。虽然很容易使用ORDER BY对在mysql中返回的ROWS进行排序,但我还没有看到如何对单个返回的多行的COLS进行排序的示例SUM-ed值如上所述。想象一下上面的10个问题,而不是2.我假设这是不可能的,但希望有人可以证明我错了......以一种很好的方式。

2 个答案:

答案 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。