我遇到一个棘手的查询问题。
所以,我有一张这样的表:
CREATE TABLE correlations
(
key1 integer not null,
key2 integer not null,
)
从那里我需要选择与{2}的最高数量相对应的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或其他数据库,所以我不能使用任何花哨的技巧。
答案 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 ║
╚════╩══════════╝