在SQLite中找到几个MAX值

时间:2013-05-06 14:41:05

标签: sql sqlite count max having

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

所以,我有一张这样的表:

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

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

所以,我现在拥有的:

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

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

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

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

2 个答案:

答案 0 :(得分:1)

您可以通过加入原始数据来完成此操作。以下是使用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
              )

答案 1 :(得分: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 ║
╚════╩══════════╝