【发布时间】:2013-11-26 15:06:00
【问题描述】:
这两个问题我已经看过了:
但是它们都使用聚合函数 MAX 来获得最高值或填充值,这不适用于我的情况。
出于这个问题的目的,我已经简化了我的情况。这是我目前的数据:
我想获取每条路线的运营商名称,但与行进方向有关(即排序或“首选”值)。这是我的伪代码:
if(`direction` = 'west' AND `operatorName` != '') then select `operatorName`
else if(`direction` = 'north' AND `operatorName` != '') then select `operatorName`
else if(`direction` = 'south' AND `operatorName` != '') then select `operatorName`
else if(`direction` = 'east' AND `operatorName` != '') then select `operatorName`
我当前的 SQL 查询是:
SELECT route, operatorName
FROM test
GROUP BY route
这给了我分组,但我的目的是错误的运算符:
route | operatorName
--------------------
95 | James
96 | Mark
97 | Justin
我已尝试应用 ORDER BY 子句,但 GROUP BY 优先。我想要的结果是:
route | operatorName
--------------------
95 | Richard
96 | Andrew
97 | Justin
我不能在这里做MAX(),因为“北”按字母顺序排在“南”之前。如何在应用 GROUP BY 子句之前明确说明我的偏好/排序?
另外请记住,空字符串不是首选。
请注意,这是一个简化的示例。实际查询选择了更多字段并与其他三个表连接,但查询中没有聚合函数。
【问题讨论】:
-
没有聚合函数的 GROUP BY 是任意的。你想做什么没有意义(使用 GROUP BY)
-
@Mihai 我愿意接受不使用
GROUP BY以获得我想要的结果的查询的建议...... -
在我看来,解决方案是将表与自身进行内部连接,并在子查询中放入 4 种情况stackoverflow.com/questions/14770671/… 但我不确定我能做到。
标签: mysql sql group-by sql-order-by