在同一个表上的两个select语句并得到Count(*)

时间:2018-06-03 13:38:38

标签: mysql

我试图在同一个表上进行两次查询以获得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(*)

2 个答案:

答案 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;