首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQl :如何对子查询使用Count?

问MySQl :如何对子查询使用Count?
EN

Stack Overflow用户
提问于 2010-08-13 23:59:51
回答 4查看 17.1K关注 0票数 2

我有一条MySQL语句,它可以选择一个名字并进行排名。

代码语言:javascript
复制
  SELECT t.name,                        
         (SELECT COUNT(*)
            FROM my_table1 z
           WHERE z.type LIKE '%Blue%' 
             AND t.type  LIKE '%Blue%'
             AND (z.score1+ z.score2 + z.score3 + z.score4) >= (t.score1+ t.score2 + t.score3 + t.score4)) AS  rank                     
    FROM my_table1 t, my_table2 d
   WHERE d.name = t.name
     AND t.status != 'unknown'
     AND t.type = 'Blue'
     AND d.area_served = '$area_id'                 
ORDER BY rank ASC

但是,我还需要知道计算出了多少个排名。例如,在X中排名第四。

如何统计排名子查询中的总行数?我需要这个比特的计数:

代码语言:javascript
复制
(SELECT COUNT(*)
    FROM my_table1 z
    WHERE z.type LIKE '%Blue%' AND  t.type  LIKE '%Blue%'
    AND (z.score1+ z.score2 + z.score3 + z.score4) >= (t.score1+ t.score2 + t.score3 + t.score4)) AS  rank

谢谢。

-Laxmidi

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-08-14 00:10:43

您可以再添加一个子查询-它将与现有的查询相同,但没有AND (z.score1+ z.score2 + z.score3 + z.score4) >= (t.score1+ t.score2 + t.score3 + t.score4)条件:

代码语言:javascript
复制
 SELECT t.name,                        
     (SELECT COUNT(*)
        FROM my_table1 z
       WHERE z.type LIKE '%Blue%' 
         AND t.type  LIKE '%Blue%'
         AND (z.score1+ z.score2 + z.score3 + z.score4) >= (t.score1+ t.score2 + t.score3 + t.score4)) AS  rank,
      // new subquery
    (SELECT COUNT(*)
        FROM my_table1 z
       WHERE z.type LIKE '%Blue%' 
         AND t.type  LIKE '%Blue%') as max_rank
FROM my_table1 t, my_table2 d   
WHERE d.name = t.name
 AND t.status != 'unknown'
 AND t.type = 'Blue'
 AND d.area_served = '$area_id'                 
ORDER BY rank ASC
票数 3
EN

Stack Overflow用户

发布于 2010-08-14 00:20:41

您可以使用相同的子选择,但不进行分数比较:

代码语言:javascript
复制
SELECT t.name,                        
         (SELECT COUNT(*)
            FROM my_table1 z
           WHERE z.type LIKE '%Blue%' 
             AND t.type  LIKE '%Blue%'
             AND (z.score1+ z.score2 + z.score3 + z.score4) >= (t.score1+ t.score2 + t.score3 + t.score4)) AS  rank,                 
         (SELECT COUNT(*)
            FROM my_table1 z
           WHERE z.type LIKE '%Blue%' 
             AND t.type  LIKE '%Blue%') AS rankOutOf
    FROM my_table1 t, my_table2 d
   WHERE d.name = t.name
     AND t.status != 'unknown'
     AND t.type = 'Blue'
     AND d.area_served = '$area_id'   

rankOutOf列返回排名查询中考虑的候选项的数量。

票数 1
EN

Stack Overflow用户

发布于 2010-08-14 00:07:29

我不确定我是否理解,但我认为您应该在子查询中包含FOUND_ROWS()。

(SELECT COUNT(*),FOUND_ROWS() FROM my_table1 z WHERE z.type LIKE '%Blue%‘和t.type LIKE '%Blue%’AND (z.score1+ z.score2 + z.score3 + z.score4) >= (t.score1+ t.score2 + t.score3 + t.score4))作为排名,数字

你可以在这里找到更多信息:http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3478630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档