Let's say I have a MySQL table with the following rows:
id | key | branchId |
---|---|---|
1 | dashboard:title | NULL |
2 | dashboard:label | 1 |
3 | dashboard:description | NULL |
4 | dashboard:description | 1 |
The goal is to return a list of rows with unique key
while giving priority to rows which have a branchId
. The expected returned rows are:
id | key | branchId |
---|---|---|
1 | dashboard:title | NULL |
2 | dashboard:label | 1 |
4 | dashboard:description | 1 |
I've tried using GROUP BY
statements alongside ORDER BY
but was not successful.
Note that I do not have access to the config server to tweak things like sql_mode
.
CodePudding user response:
Thanks PM 77-1 for the comment. This question is indeed associated with "Top 1 per group" tasks.
The answer is to group by key
with a MAX()
on branchId
SELECT `key`, max(branchId) from `table` group by `key`;
CodePudding user response:
Here's a simple solution based on group by
and order by
.
select max(id) as id
,`key`
,max(branchId) as branchId
from t
group by `key`
order by branchId
id | key | branchId |
---|---|---|
1 | dashboard:title | null |
2 | dashboard:label | 1 |
4 | dashboard:description | 1 |