sql - 在SQLite中找到几个MAX值

标签 sql sqlite count max having

我有一个棘手的查询问题。

因此,我有一个像这样的表:

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


从那里,我需要选择与最多key2数量相对应的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或其他数据库的,因此我无法使用任何花哨的技巧。

最佳答案

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

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
                    )
        )



SQLFiddle Demo


输出值

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

关于sql - 在SQLite中找到几个MAX值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16401156/

相关文章:

mysql - 统计一个mysql count的结果?

php - SQL 根据表 B 中的条件返回表 A 的结果

sql - 计算重复的三元组

编译 sqlite 合并以获取用户身份验证会引发错误 C2129 和 C1083

ruby-on-rails - 在 ActiveRecord 中执行后回滚

sql - MSSQL : Display Rows for a Select with Case and Count even if Count = 0

sql - 如何截断为 MySQL 查询中的列返回的文本

sql - 如果我明确想要 INNER JOIN,省略 INNER 关键字是否安全?

mysql - 将子查询限制为同一行中的 2 个参数

sql - 带有 Join 和 where 子句的 Count 语句