【问题标题】:MySQL return ID with smallest countMySQL 返回具有最小计数的 ID
【发布时间】:2011-12-20 15:57:52
【问题描述】:

我正在尝试从一个表中获取一个 ID,根据该 ID 的条目最少,只使用一个查询。是否可以在一个查询中做到这一点?

例如:

----------------------
|   ID   | Article_ID|
----------------------
|    1   |      7    |
----------------------
|    1   |      3    |
----------------------
|    1   |      4    |
----------------------
|    2   |      5    |
----------------------

我希望它为 ID“2”返回“2”,因为它只有 1 个计数,而 ID 1 有 3 个计数。

我知道我可以通过首先运行查询以获取所有 ID 的列表然后执行循环以获取每个 ID 计数然后最后比较它们来完成此操作,但我想知道是否可以这样做所有这些都在一个查询中完成。

【问题讨论】:

    标签: mysql count unique distinct


    【解决方案1】:

    从以下光标读取第一行:

    select id from (
      select id, count(id) as c 
        from <table name> group by id 
    ) as x order by c limit 1
    

    【讨论】:

    • 在最后加一个“limit 1”子句,你就明白了
    • 谢谢,我对mysql语法不是很熟悉。我主要与 Oracle 合作。
    • Klas,感谢您的帮助 - 我尝试了以下操作,但出现错误:select id from (select id, count(id) c from authors_article group by id) order by c limit 1 Error: Every派生表必须有自己的别名
    • 我为派生表添加了别名。
    • 完美!正是我需要的,TYVM。
    【解决方案2】:

    我最喜欢的获取这些数据的方法是使用自联接(我可能将

    SELECT t1.ID, t1.Article_ID
    FROM table t1
        LEFT JOIN table t2 ON t1.id = t2.id AND t1.article_id < t2.article_id
    WHERE t2.id is null
    

    这将从查询中返回,以防万一,即使它没有准确回答问题。

    -------------------
    | ID | Article_ID |
    -------------------
    | 1  | 3          |
    -------------------
    | 2  | 5          |
    -------------------
    

    【讨论】:

    • 不是他想要的。仅在最低计数为 1 时才有效
    • 您的权利。我应该更仔细地阅读它。没想到这么简单的问题。
    猜你喜欢
    • 2020-08-31
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 2011-11-06
    相关资源
    最近更新 更多