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

时间:2016-01-25 10:26:11

标签: 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 |
+--------------+----+
|            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 1,即使我按id降序使用order,而我期望id的值为3,我哪里错了?

感谢。

3 个答案:

答案 0 :(得分:1)

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

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

我在我的数据库 MySQL

中尝试你的表

答案 1 :(得分:1)

您正在选择 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。所以这个特定的聚合函数应用于整个表。

答案 2 :(得分:1)

当你在没有group by子句的select列表中有一个按功能分组(在这个实例中为count())时,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字段中的值是连续的,没有间隙。