1

我对一个棘手的查询有疑问。

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

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 或其他数据库,所以我不能使用任何花哨的技巧。

4

2 回答 2

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
              )
于 2013-05-06T14:48:42.933 回答
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 ║
╚════╩══════════╝
于 2013-05-06T14:50:21.260 回答