如果使用 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 字段中的值是连续的,没有间隙。
我有一个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 字段中的值是连续的,没有间隙。