Also, note that while MySQL will run a query like:
select field1, field2 from table group by field1;
Most (actually ALL) other databases will choke on this syntax, since you could have more than one possible field2 result for each grouping of field1. In any other database you will HAVE to use an aggregate function on any field you're not grouping by:
select field1, max(field2) from table group by field1.
Also, the ANSI standard way of saying NOT EQUAL to is <>, not != like most programming languages. While some databases support !=, it is not standard, and may break if you ever try to migrate.
Just to add to the where clause stuff. The order of ops here is to fire the where clause first, then the group by, then the having.
select field1, max(field2), count() as cnt from table
where field1 <>'General'
group by field1
having count() >2
The database will first select ALL rows in the database that have field1<>'General', then it will aggregate them on field1, and then it will throw out all rows that have a count of less than 3.