[英]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.