选择groupBy后,统计单个用户的记录总数



我有一个mysql选择查询,有一个groupBy。我想计算所有的记录之后的group by语句为个别用户。是否有一种方法可以直接从mysql ?

$query = mysql_query('SELECT distinct(tape_no) , user_id, username FROM `audio_history`  group by username , tape_no');
$i=1;
$temp = '';
 while($res = mysql_fetch_object($query)){
  if($temp != $res->username && $temp != ''){
  echo $res->user_id . '---' .$temp  . "$i<br>";
  $i = 0;
  }
 temp = $res->username;
 $count = $i;
 $i++;
 }

sql语句

SELECT distinct(tape_no) ,
 user_id, username 
FROM `audio_history`  
group by username , tape_no

返回
tape_no user_id username    
001 790 adam
422 790 adam
903 001 alic
585 005 cooper
356 005 cooper
697 005 cooper

我希望输出返回为

 uname    uif  count_for_individual_user
 adam     790     2
 alic     001     1
 cooper   005     3

我需要得到这样做的最简单的方法,不使用php代码,只有通过查询。提前感谢

要获得每个用户的tape_no的DISTINCT值的计数,即不包括tape_no的任何"重复"值,请在 COUNT聚合中添加DISTINCT关键字

SELECT username                AS uname
     , user_id                 AS uif 
     , COUNT(1)                AS count_for_individual_user
     , COUNT(DISTINCT tape_no) AS count_distinct_tape_no
  FROM `audio_history`
 GROUP BY username, user_id 

给定这些行:

username user_id tape_no
-------- ------- -------
adam     790     001
adam     790     422
adam     790     422

那么上面的查询将

返回3对于COUNT(1)表达式(因为(adam,790)有三行),并且将

对于COUNT(DISTINCT tape_no)表达式,

返回2,因为对于(adam,790), tape_no只有两个不同的值。

SELECT username, user_id, count(*)
FROM audio_history
group by username, user_id  

最新更新