MySQL - Using COUNT(*) in the WHERE clause

前端 未结 9 1649
不思量自难忘°
不思量自难忘° 2020-11-28 20:55

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

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


        
相关标签:
9条回答
  • 2020-11-28 21:37

    Just academic version without having clause:

    select *
    from (
       select gid, count(*) as tmpcount from gd group by gid
    ) as tmp
    where tmpcount > 10;
    
    0 讨论(0)
  • 2020-11-28 21:38

    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;
    
    0 讨论(0)
  • 2020-11-28 21:38

    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() ;

    0 讨论(0)
  • 2020-11-28 21:40

    try this;

    select gid
    from `gd`
    group by gid 
    having count(*) > 10
    order by lastupdated desc
    
    0 讨论(0)
  • 2020-11-28 21:45
    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
    
    0 讨论(0)
  • 2020-11-28 21:48

    try

    SELECT DISTINCT gid
    FROM `gd`
    group by gid
    having count(*) > 10
    ORDER BY max(lastupdated) DESC
    
    0 讨论(0)
提交回复
热议问题