簡體   English   中英

MySQl:如何在子查詢上使用Count?

[英]MySQl : How do I use Count on a Sub-Query?

我有一個MySQL語句,該語句選擇一個名稱並進行排名。

  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中排名第4。

如何計算排名子查詢中的總行數? 我需要這一點的計數:

(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

您可以再添加一個子查詢-與現有子查詢相同,但不使用AND (z.score1+ z.score2 + z.score3 + z.score4) >= (t.score1+ t.score2 + t.score3 + t.score4)條件:

 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

您可以使用相同的子選擇而不進行分數比較:

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列返回排名查詢中考慮的候選數。

我不確定是否可以理解,但是我認為您應該在子查詢中包含FOUND_ROWS()。

(從my_table1 z中選擇COUNT(*),FOUND_ROWS(),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))AS排名,編號

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

我在理解您的問題時遇到了一些麻煩,但我會采取行動。

這部分為您提供特定的等級編號(例如4):

(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

因此,為了找到該子查詢的總行數,您只需要刪除WHERE子句即可。 我不確定是否需要刪除WHERE子句中的所有內容,也許只是類型,還是分數?

如果您要將多個行分組在一起,我將使用GROUP BY ,然后根據需要使用COUNT

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM