在一个给定表中,我想在列A中选择具有最大值的行,但是如果有2行或更多行具有最大值,则想要获取列中值的行-B不为null,如果有的话,否则我只得到第一行的最大值,即使B列中的值为空。
总结:
第一选择:Column-A maximum,Column-B Not null
in case such a row does not exist
第二选择:Column-A格言,Column-B Null
是否可以使用此约束编写单个查询,还是必须创建两个具有某些逻辑的查询?
答案 0 :(得分:1)
您可以使用多个列ORDER BY
,如下所示
SELECT columnA,columnB
FROM YourTable
ORDER BY columnA DESC, columnB DESC
它将按列A按降序排列,然后按降序排列columnB,则null将是最后一个选择。
如果只返回一行,在查询结尾处添加LIMIT 1
。
答案 1 :(得分:0)
在查询下方可以解决问题
SELECT * FROM tableA where columnA=(select max(columnA) from tableA) order by columnB desc
答案 2 :(得分:0)
您可以使用内联视图返回col_a的最大值,然后执行连接以获取具有相同col_a值的所有行,然后从这些行中获取col_b的最大值。
例如:
SELECT s.col_a
, MAX(t.col_b) AS col_b
FROM ( SELECT MAX(r.col_a) AS col_a
FROM mytable r
) s
JOIN mytable t
ON t.col_a = s.col_a