The Royals made the Chicago White Sox pay for a pair of errors by scoring three runs in the eighth inning to rally for a 7-6 win.
Down 6-4, the Royals got singles by Mike Moustakas and David Lough off Sox reliever Jesse Crain (2-2) to start the eighth. An error by Crain while trying to field a bunt by Elliot Johnson loaded the bases with nobody out.
Crain struck out George Kottaras and Jarrod Dyson, but walked Alex Gordon to force in a run. Then, Alcides Esocbar reached on a grounder to shortstop that Alexei Ramirez let through into left field, bringing in the go-ahead runs.
The unearned runs were the first runs Crain had allowed in 30 appearances.
Luke Hochevar struck out two in a scoreless innings of relief to pick up his first win of the season and Greg Holland pitched a perfect ninth for his 16th save in 18 chances.
Kottaras and Dyson also hit back-to-back homers for the Royals, ending a four-game losing streak and avoiding a sweep of the Sox.