SELECT email, count( * ) AS nm
FROM `uc_members`
GROUP BY email
HAVING COUNT( * ) >1
ORDER BY nm DESC
按照 email 分组
where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。
having 子句被限制子已经在SELECT语句中定义的列和聚合表达式上。通常,你需要通过在HAVING子句中重复聚合函数表达式来引用聚合值,就如你在SELECT语句中做的那样。例如:
SELECT A COUNT(B) FROM TABLE GROUP BY A HAVING COUNT(B)>2
批量给重复邮件加前缀
<?php
define('APPTYPEID', 4);
define('CURSCRIPT', 'portal');
set_time_limit(180);
require './source/class/class_core.php';
require './source/function/function_forum.php';
$discuz = & discuz_core::instance();
$discuz->init();
$rs=DB::query("SELECT email,count(*) as nm FROM ucenter.`uc_members` group by email having count(*) >2 order by nm desc");
while ($rw=DB::fetch($rs)) {
$sql="UPDATE ucenter.uc_members SET email=CONCAT(round( rand( 100000 ) *100000, 0 ),'__".$rw[email]."') WHERE email='".$rw[email]."'";
DB::query($sql, 'UNBUFFERED');
echo 'OK'.$sql."<br>";
}