If you don't specify an ORDER BY clause, then SQL can return rows in any sequence that it finds convenient at the moment - which means that two sequential identical queries do not necessarily return the same data in the same order. ORDER BY tells SQL exactly how to return the data. This is handy when you SELECT records for display, and want users name in alphabetical sequence, for example. If you use more than one column, then the ordering is done by the first specified, then the second is applied to identical values in the first column, and so forth.
GROUP BY allows you to aggregate rows - so you can ask things like "how much has each salesman sold last month?"
SELECT SalesManName, SUM(SalesValue)
WHERE SaleDate BETWEEN '2015-09-01' AND '2015-09-30'
GROUP BY SalesManName
Do note that with GROUP BY that because it aggregates values you can't return any columns that are not listed in the GROUP BY clause list, unless they are in an aggregation function such as SUM, COUNT, and so forth, as that would require returning multiple values in the same row, and SQL doesn't do that!