【问题标题】:Find several MAX values in SQLite在 SQLite 中查找几个 MAX 值
【发布时间】:2013-05-06 14:41:05
【问题描述】:

我遇到了一个棘手的查询问题。

所以,我有一张这样的桌子:

CREATE TABLE correlations
(
    key1 integer not null,
    key2 integer not null,
)

从那里我需要选择key1 的列表,它们对应于 key2 的最大数量。也就是说,它应该返回key1 = 1key2 = 2,因为两者都有2次,这意味着在所有这些中“2”是最大的数字。 这里的问题是它必须返回许多key1 字段。如果它只是一个,那将是小菜一碟。

那么,我现在拥有的:

SELECT key1, count(key2) AS ccc
FROM correlations
GROUP BY key1
HAVING ccc = MAX(ccc)

当然它不起作用......因为这不是你使用MAX的方式。

如何修改此查询以使其按预期工作?

这是用于 SQLite,而不是 MySQL 或其他数据库,所以我不能使用任何花哨的技巧。

【问题讨论】:

    标签: sql sqlite count max having


    【解决方案1】:

    您可以有多个子查询来满足您的需求。

    SELECT  a.*     -- gets all rows that category belong to greatest count
    FROM    correlations a
    WHERE   category IN
            (
                SELECT  category     -- gets all category which count is equal
                FROM    correlations -- to the greatest counts
                GROUP   BY category
                HAVING  COUNT(*) =
                        (
                            SELECT  DISTINCT COUNT(*) totalCOunt -- gets the maximum
                            FROM    correlations                 -- count
                            GROUP   BY category
                            ORDER   BY totalCOunt Desc
                            LIMIT   1
                        )
            )
    

    输出

    ╔════╦══════════╗
    ║ id ║ category ║
    ╠════╬══════════╣
    ║  1 ║        1 ║
    ║  2 ║        1 ║
    ║  3 ║        2 ║
    ║  4 ║        2 ║
    ╚════╩══════════╝
    

    【讨论】:

      【解决方案2】:

      您可以通过连接回原始数据来做到这一点。这是使用in的方法:

      SELECT id, count(category) AS cat
      FROM correlations c
      GROUP BY id
      where c.cnt = (select max(cnt)
                     from (select c2.id, count(c2.category) as cnt
                           from correlations c2
                           group by c2.id
                          ) t
                    )
      

      【讨论】:

      • 抱歉,我更改了我的问题以提供任意字段名称,以便在您回答后更好地理解实际问题。
      猜你喜欢
      • 1970-01-01
      • 2015-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-07
      • 2013-10-29
      相关资源
      最近更新 更多