【问题标题】:ORDER BY does not work if COUNT is used如果使用 COUNT,则 ORDER BY 不起作用
【发布时间】:2016-01-25 10:26:11
【问题描述】:

我有一个包含以下内容的表格

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,我哪里出错了?

谢谢。

【问题讨论】:

    标签: mysql count sql-order-by


    【解决方案1】:

    在你的情况下,你可以使用这个查询:

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

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

    【讨论】:

    • 谢谢你@IbrahimAzharArmar 如果你想你可以在这个查询中添加你的HAVING COUNT(*)
    【解决方案2】:

    当您在选择列表中有一个 group by 函数(在此实例中为 count())而没有 group by 子句时,mysql 将仅返回一条记录,该函数应用于整个表。

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

    如果您想获取表中 id=count of records 的记录,那么我将使用以下查询:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2018-06-21
        • 1970-01-01
        • 2011-04-18
        • 2011-09-21
        • 2014-08-03
        • 1970-01-01
        • 1970-01-01
        • 2017-04-28
        • 2019-01-27
        相关资源
        最近更新 更多