I just recently did a battle with:
4 players, 8 allied NPCs vs. 1 Death Knight and His Undead Hordes (which consisted of a bunch of Undead, but acted as a single monster entity)
What I did was this: Each player played for themselves of course, I drew Initiative for all allies as a single group, the Death Knight and the Horde.
The players decided to take on the boss, the NPCs would fight the Horde.
The allied NPCs just had basic stats and I rolled each of them with just Base + Skill + Gear, no pushing, no skills, just deducting the damage from the Horde STR. The Death Knight was standard from the rules and would focus his attacks on the players, as they were attacking him in turn and pissed him off the most
.
The Undead Horde was a homebrew monster with 40 STR and monster attacks that fell into three categories: a) Trying to overwhelm the defenders with sheer strength in numbers. Damage from these attacks were distributed among the NPC allies. b) Being commanded by the Death Knight, which meant they would single out a player character to direct damage at. And c) I got an attack that could heal up the Boss by sacrificing STR points of the Horde. Which... never happened, because the archer had unholy luck, but that's how it sometimes goes
.
Killing the Boss would reduce the Horde STR by half instantly to mirror that his command over them was gone and they had not a lot of intelligence on their own. And to don't drag out the fight much longer after the boss was defeated.
Worked pretty well, took about 30 minutes overall and felt pretty epic and fun. Oh, and I upped the Death Knight STR by 3, to make him last a bit longer with 4 players hammering at him.^^
With Roll20 it was easy to roll the NPCs, too. At the physical table I would have just given them all identical stats and once they had taken damage, would roll reduced STR for all of them to make it easier.