2013-05-06 131 views
1

我有一個棘手的查詢問題。在SQLite中查找幾個MAX值

所以,我有一個表像這樣:

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

回答

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 ║ 
╚════╩══════════╝ 
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 
      ) 
+0

對不起,我改變了我的問題,你已經回答後,得到任意字段名稱更好地瞭解實際問題。 – NewProger 2013-05-06 14:50:04