MySQL-在WHERE子句中使用COUNT(*)

MySQL-在WHERE子句中使用COUNT(*),mysql,count,aggregation,having,Mysql,Count,Aggregation,Having,我试图在MySQL中实现以下功能(请参见pseudocode) 有没有一种方法可以在WHERE子句中不使用(SELECT…)来执行此操作,因为这看起来像是浪费资源 SELECT COUNT(*) FROM `gd` GROUP BY gid HAVING COUNT(gid) > 10 ORDER BY lastupdated DESC; 编辑(如果您只需要GID): 试试这个 select gid from `gd` group by gid having count(*) >

我试图在MySQL中实现以下功能(请参见
pseudo
code)

有没有一种方法可以在WHERE子句中不使用(SELECT…)来执行此操作,因为这看起来像是浪费资源

SELECT COUNT(*)
FROM `gd`
GROUP BY gid
HAVING COUNT(gid) > 10
ORDER BY lastupdated DESC;
编辑(如果您只需要GID):

试试这个

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

我不确定你想做什么。。。也许像

SELECT gid, COUNT(*) AS num FROM gd GROUP BY gid HAVING num > 10 ORDER BY lastupdated DESC
试一试

--搜索丢失半小时记录的气象站

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;

--雅皮斯卡语的变体,带有where。。在里面选择我认为您不能将
count()
添加到
where
。现在看看为什么

其中
不同于拥有,
拥有
意味着你正在工作或处理一个团队,同样的计数工作,它也在处理整个团队

现在,整个团队的工作情况如何

创建一个表并输入一些id,然后使用:

select count(*) from table_name

你会发现总值意味着它表示某个组!所以
其中
添加了
count()

只是学术版,没有条款:

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

WHERE子句中不能有聚合函数(例如COUNT、MAX等)。因此,我们使用HAVING子句。因此,整个查询与此类似:

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;
计数(*)只能与have一起使用,并且必须在GROUP BY之后使用 声明请参见以下示例:


谢谢Joe,但这会返回COUNT()-我希望返回所有具有COUNT(*)的gid,超过10,不需要Min()在这里,+1表示他们总是不愿意在sql课程或书籍中正确教授这一条款,并且通常知道这一点,这表明程序员已经超越了新手水平。如果您试图将COUNT()用作布尔或表达式的一部分,该怎么办?e、 g.
和((stock=1或quantity>0)或(COUNT(v.id)>0)
我猜出来了。你可以这样添加到HAVING子句:
havings variations>0或(stock=1或quantity>0)
MSSQL给出了
num
+1的“无效列名”解析错误,因为语法干净(可能是我的设置,也可能是ms…)。为“选择”中的所有列提供别名。
select count(*) from table_name
select *
from (
   select gid, count(*) as tmpcount from gd group by gid
) as tmp
where tmpcount > 10;
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;
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