I am trying to accomplish the following in MySQL (see pseudo code)

SELECT DISTINCT gid FROM `gd` WHERE COUNT(*) > 10 ORDER BY lastupdated DESC 

Is there a way to do this without using a (SELECT...) in the WHERE clause because that would seem like a waste of resources.

0

9 Answers

try this;

select gid from `gd` group by gid having count(*) > 10 order by lastupdated desc 
4

I'm not sure about what you're trying to do... maybe something like

SELECT gid, COUNT(*) AS num FROM gd GROUP BY gid HAVING num > 10 ORDER BY lastupdated DESC 
2
SELECT COUNT(*) FROM `gd` GROUP BY gid HAVING COUNT(gid) > 10 ORDER BY lastupdated DESC; 

EDIT (if you just want the gids):

SELECT MIN(gid) FROM `gd` GROUP BY gid HAVING COUNT(gid) > 10 ORDER BY lastupdated DESC 
2

Just academic version without having clause:

select * from ( select gid, count(*) as tmpcount from gd group by gid ) as tmp where tmpcount > 10; 

try

SELECT DISTINCT gid FROM `gd` group by gid having count(*) > 10 ORDER BY max(lastupdated) DESC 
0

There can't be aggregate functions (Ex. COUNT, MAX, etc.) in A WHERE clause. Hence we use the HAVING clause instead. Therefore the whole query would be similar to this:

SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name HAVING aggregate_function(column_name) operator value; 

COUNT(*) can only be used with HAVING and must be used after GROUP BY statement Please find the following example:

SELECT COUNT(*), M_Director.PID FROM Movie INNER JOIN M_Director ON Movie.MID = M_Director.MID GROUP BY M_Director.PID HAVING COUNT(*) > 10 ORDER BY COUNT(*) ASC 

-- searching for weather stations with missing half-hourly records

SELECT stationid FROM weather_data WHERE `Timestamp` LIKE '2011-11-15 %' AND stationid IN (SELECT `ID` FROM `weather_stations`) GROUP BY stationid HAVING COUNT(*) != 48; 

-- variation of yapiskan with a where .. in .. select

i think you can not add count() with where. now see why ....

where is not same as having , having means you are working or dealing with group and same work of count , it is also dealing with the whole group ,

now how count it is working as whole group

create a table and enter some id's and then use:

select count(*) from table_name 

you will find the total values means it is indicating some group ! so where does added with count() ;

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy