如果使用 COUNT,则 ORDER BY 不起作用

ORDER BY does not work if COUNT is used

我有一个table,内容如下

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 |
+--------------+----+

问题是它 returns id 1 即使我按 id 降序使用顺序,而我期望 id 的值为 3,我哪里错了?

谢谢。

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

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

我在我的数据库中尝试你的 table MySQL

您正在选择 la.id 以及聚合函数 (COUNT)。因此,在迭代第一条记录后,la.id 被选中,但 count 继续。所以在这种情况下,您将得到第一个 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。所以这个特定的聚合函数应用于整个 table.

如果 select 列表中有分组依据函数(在本例中为 count())而没有分组依据子句,则 mysql 将仅 return 一条记录将函数应用于整个 table.

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

如果要获取 table 中 id=记录数的记录,那么我将使用以下查询:

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

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