This should do the trick:
$sticky = get_option( 'sticky_posts' );
$args = array(
'posts_per_page' => -1,
'post__in' => $sticky,
'ignore_sticky_posts' => 1
);
$query = new WP_Query( $args );
$ids_by_category = array();
while ($query->have_posts()) {
$query->the_post();
$post_categories = wp_get_post_categories(get_the_ID());
foreach($post_categories as $c){
$cat = get_category($c);
$ids_by_category[$cat->slug][] = get_the_ID();
}
}
// sort by key
ksort($ids_by_category);
foreach ($ids_by_category as $category_slug => $ids) {
foreach ($ids as $id) {
printf(
'<a href="https://wordpress.stackexchange.com/questions/235659/%s">%d</a> %s<br>',
get_permalink($id),
$id,
$category_slug
);
}
}