l1 = {{"c", 3.5}, {"a", 2.2}, {"d", 1.2}, {"b", 0.5}};

    l2 = {{"a", 1}, {"b", 3}, {"c", 5}, {"d", 9}};
___
Using the third argument of `GroupBy`:

    f = Values[
    Sort@GroupBy[Join[#1, #2], First, 
      DeleteDuplicates@*Join @@ 
        ReverseSortBy[#, MatchQ[#[[2]], _Integer] &] &]] &;

    f[l1, l2]

> `{{"a", 1, 2.2}, {"b", 3, 0.5}, {"c", 5, 3.5}, {"d", 9, 1.2}}`

Or using `GroupBy` and `SortBy`:

    f = Values@GroupBy[Sort@Join[#1, #2], 
        First, {#1[[1]], Splice@SortBy[#2, ! IntegerQ[#] &]} & @@ Thread@# &] &;

    f[l1, l2]

> `{{"a", 1, 2.2}, {"b", 3, 0.5}, {"c", 5, 3.5}, {"d", 9, 1.2}}`