我有一个棘手的查询问题。
因此,我有一个像这样的表:
CREATE TABLE correlations
(
key1 integer not null,
key2 integer not null,
)
从那里,我需要选择与最多key2数量相对应的
key1
列表。也就是说,它应该返回key1 = 1
和key2 = 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/