想象一下在线调查中的两个问题:
- 你喜欢苹果吗?
结果存储在 mysql 数据库列“q1”中:1对于“是”或0 for No
- 你喜欢橙子吗?
结果存储在 mysql 数据库列“q2”中:1对于“是”或0 for No
想象一下以下 SELECT 语句:
SELECT SUM(q1) AS q1Sum, SUM(q2) AS q2Sum FROM myTable
假设 q1Sum=10 且 q2Sum=12。当前的 SELECT 语句将返回:
+-------+-------+
| q1Sum | q2Sum |
+-------+-------+
| 10 | 12 |
+-------+-------+
But是否可以返回不同的列顺序,以便最大的 SUM 始终是返回的第一列,而不更改 SELECT 语句中的列表顺序?
SELECT SUM(q1) AS q1Sum, SUM(q2) AS q2Sum FROM myTable << something else >>
+-------+-------+
| q2Sum | q1Sum |
+-------+-------+
| 12 | 10 |
+-------+-------+
如果 q1Sum 大于 q2Sum,则返回的列顺序将恢复为原始顺序。
我为什么要问这个问题?
- 我从类似于上面的调查中继承了一个包含多个列的大表,对多个问题的回答是“是”= 1 和“否”= 0。我认为正确的方法是创建保存 SUM 值的变量并将它们插入临时表行,然后选择/排序返回的行。然而,这并没有真正回答“是否可以对返回的列进行排序”的问题,我什至不确定我的假设在“正确的方法”上是否正确......
- 虽然我知道如何对返回的结果进行排序,而不管顺序如何(在我的例子中使用 php),但我很好奇是否有一种方法可以自动对 mysql 中返回的列进行排序,以便最高值始终是第一列和 SUM -ed 结果是,对于返回的剩余列,剩余列的数值会减少。
-
好奇是否有一个优雅的答案。虽然使用 ORDER BY 对 mysql 返回的 ROWS 进行排序很容易,但我还没有看到如何对多个 SUM 值的单个返回行的 COLS 进行排序的示例,如上所述。想象一下上面的 10 个问题而不是 2 个问题。我假设这是不可能的,但希望有人能证明我错了......以一种很好的方式。
假设我正确理解你的问题,你可以使用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
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)