Apart from the useless use of cat, since sort does the work here something like the following would probably suffice:
grep ERROR logfile | cut -f 1 -d ' ' | sort | uniq -c
grep ERROR logfile | cut -f 1 -d ' ' | sort | uniq -c
It's not detrimental to performance since an empty cat is a no-op in a pipeline. You can have any number of them. But commands should be written for humans to understand, and inserting no-ops is a distraction to the reader.
In the trivial example, "grep needle haystack" reads better than "cat haystack | grep needle".