我试图在同一个表上进行两次查询以获得Count(*)值。
我有这个
SELECT `a`.`name`, `a`.`points` FROM `rank` AS a WHERE `id` = 1
在同一个查询中,我想这样做
SELECT `b`.`Count(*)` FROM `rank` as b WHERE `b`.`points` >= `a`.`points`
我尝试搜索但未找到如何在同一查询中执行Count(*)
。
答案 0 :(得分:0)
通常,您不会在MySQL中将非聚合和聚合查询混合在一起。您可以在支持分析功能的数据库(例如SQL Server)中执行此操作,但不能在(当前版本的)MySQL中执行此操作。话虽这么说,您的第二个查询可以使用第一个查询的select子句中的相关子查询来处理。所以你可以尝试以下方法:
SELECT
a.name,
a.points,
(SELECT COUNT(*) FROM rank b WHERE b.points >= a.points) AS cnt
FROM rank a
WHERE a.id = 1;
答案 1 :(得分:0)
正如我从问题中所理解的那样,您希望在表格中找到给定ID,其中有多少行的点数大于此行。这可以使用完全连接来实现。
select count(*) from rank a join rank b on(a.id != b.id) where a.id=1 and b.points >= a.points;