我有一张包含以下内容的表格
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,我哪里错了?
感谢。
答案 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字段中的值是连续的,没有间隙。