【问题标题】:count total records for individual user after groupBy select计算 groupBy 后单个用户的总记录数
【发布时间】:2014-07-17 20:05:28
【问题描述】:

我有一个具有 groupBy 的 mysql 选择查询。我想为单个用户计算分组后的所有记录。有没有办法直接从 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 代码的情况下通过查询获得最简单的方法。提前致谢

【问题讨论】:

  • 注意:DISTINCT 不是一个函数。 DISTINCT 关键字适用于整个 SELECT 列表。 SELECT 列表中第一列周围的括号有 no 效果,它们被忽略。如果我们写 SELECT DISTINCT(fee), fi 让它“看起来”像一个函数,但它不是。和 DISTINCT fee, fi 完全一样。

标签: php mysql


【解决方案1】:

要获取每个用户的 tape_no 的 DISTINCT 值的计数,即不包括计数中的 tape_no 的任何“重复”值,请在 @987654322 中添加 DISTINCT 关键字inside @聚合。

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

那么上面的查询就会

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

COUNT(DISTINCT tape_no) 表达式返回2,因为(adam,790)tape_no 只有两个不同 值。

【讨论】:

    【解决方案2】:
    SELECT username, user_id, count(*)
    FROM audio_history
    group by username, user_id  
    

    【讨论】:

      猜你喜欢
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-20
      • 1970-01-01
      • 1970-01-01
      • 2017-11-19
      相关资源
      最近更新 更多