I have come up with the following code to group entries by categories;
{% set hotTubs = craft.entries()
.section('newHotTubs')
.orderBy('price asc')
%}
{% set hotTubsCats = craft.categories()
.group('newHotTubBrands')
.relatedTo(hotTubs)
%}
{% block content %}
{# Loop the categories #}
{% for category in hotTubsCats.all() %}
{{ category.title }}
{# Get and loop through entries related to this cat #}
{% set hotTubs = craft.entries.relatedTo(category) %}
{% for entry in hotTubs.all() %}
{% include '_includes/blocks/related-tub-new' %}
{% endfor %}
{% endfor %}
{% endblock %}
However, I wanted to check if this is the most efficient approach or if this could be improved upon?