Mysql 如果使用计数,则“订单依据”不起作用

Mysql 如果使用计数,则“订单依据”不起作用,mysql,count,sql-order-by,Mysql,Count,Sql Order By,我有一张有以下内容的桌子 loan_application +----+---------+ | id | user_id | +----+---------+ | 1 | 10 | | 2 | 10 | | 3 | 10 | +----+---------+ 我只想在有3条记录可用的情况下获取第3条记录,在这种情况下,我需要id 3,总计数必须为3,这是我所期望的 +--------------+----+ | COUNT(la.id) | id | +-

我有一张有以下内容的桌子

loan_application
+----+---------+
| id | user_id |
+----+---------+
|  1 |      10 |
|  2 |      10 |
|  3 |      10 |
+----+---------+
我只想在有3条记录可用的情况下获取第3条记录,在这种情况下,我需要id 3,总计数必须为3,这是我所期望的

+--------------+----+
| COUNT(la.id) | id |
+--------------+----+
|            3 |  3 |
+--------------+----+
这是我尝试过的问题

SELECT COUNT(la.id), la.id FROM loan_application la HAVING COUNT(la.id) = 3 ORDER BY la.id DESC;
然而,这给了我以下的结果

+--------------+----+
| COUNT(la.id) | id |
+--------------+----+
|            3 |  1 |
+--------------+----+
问题是,即使我使用按id降序,它也会返回id 1,而我希望id的值为3,我哪里出错了


谢谢。

在您的情况下,您可以使用此查询:

SELECT COUNT(la.id), max(la.id) FROM loan_application la 
GROUP BY user_id

我在my dbMySQL中尝试您的表,您正在选择la.id以及聚合函数(COUNT)。因此,在迭代第一条记录之后,选择了la.id,但计数继续进行。因此,在本例中,您将获得第一个la.id而不是最后一个。要获取最后一个la.id,需要在该字段上使用max函数

以下是更新后的查询:

SELECT
    COUNT(la.id),
    MAX(la.id)
FROM
    loan_application la
GROUP BY user_id
HAVING
    COUNT(la.id) = 3

N:B:您使用的是不带GROUP BY函数的COUNT。因此,这个特定的聚合函数将应用于整个表。

当select列表中有一个group by函数(在本例中为count())而没有group by子句时,mysql将只返回一条记录,该函数将应用于整个表

某些配置设置下的Mysql允许您在select loist中包含不在group by子句中的字段,也不允许聚合这些字段。Mysql在扫描数据时几乎会将遇到的第一个值作为此类字段的值,在您的示例中,是id的值1

如果要获取id=表中记录计数的记录,则我将使用以下查询:

select *
from loan_application
join (select count(*) as numrows from loan_application) t
where id=t.numrows and t.numrows=3

但是,这意味着id字段中的值是连续的,没有间隙。

谢谢:-)这很有帮助。如果需要,也要谢谢你@Ibrahimazharmar你可以在这个查询中添加你的
计数(*)