簡體   English   中英

SQL查詢以使用最大聚合選擇行並將它們放在一起

[英]SQL query to select rows using max aggregate and putting them together

我有一個表,其中第一列是鍵值。 我必須為每個鍵值選擇一行(選擇具有最大“計數”字段的鍵值),然后將它們彼此相鄰排列。 我為此編寫了此查詢:

SELECT name as "name",
MAX(CASE WHEN key_id=8 THEN count ELSE 0.0 END) AS "key_1",
key_value as "key_1_value",
MAX(CASE WHEN key_id=9 THEN count ELSE 0.0 END) AS "key_2",
key_value as "key_2_value",
MAX(CASE WHEN key_id=10 THEN count ELSE 0.0 END) AS "key_3",
key_value as "key_2_value"
FROM table1 GROUP BY  name;

我得到的結果是:

name1      281000018371    0.881841        247000421624    0.881841        285000032094    0.881841

計數的值是正確的,即該特定key_id的計數的最大值,但是key_value僅對於第一個key_id正確,對於其他兩個重復。 有人可以告訴我如何更改此查詢,以便從具有相應key_id和max(count)的行中獲取key_value。

這是您要做什么?

SELECT 
    name as "name",
    MAX(CASE WHEN key_id=8 THEN count ELSE 0.0 END) AS "key_1",
    MAX(CASE WHEN key_id=8 THEN key_value END) AS "key_1_value",
    MAX(CASE WHEN key_id=9 THEN count ELSE 0.0 END) AS "key_2",
    MAX(CASE WHEN key_id=9 THEN key_value END) AS "key_2_value",
    MAX(CASE WHEN key_id=10 THEN count ELSE 0.0 END) AS "key_3",
    MAX(CASE WHEN key_id=10 THEN key_value END) AS "key_3_value"
FROM table1 
GROUP BY  name;

如果沒有樣本數據,我假設您正在查看多行,並嘗試將某些鍵放入列中。 您的原始查詢為每個列提取相同的值。

編輯:如果您有大量數據,性能對此將是可怕的 ,但是您可以嘗試執行此操作...

SELECT 
    name as "name",
    MAX(CASE WHEN key_id=8 THEN count ELSE 0.0 END) AS "key_1",
    (SELECT TOP 1 key_value FROM Table1 k1 WHERE k1.name = Table1.name AND key_id = 8 ORDER BY Count DESC) as "key_1_value",
    MAX(CASE WHEN key_id=9 THEN count ELSE 0.0 END) AS "key_2",
    (SELECT TOP 1 key_value FROM Table1 k2 WHERE k2.name = Table1.name AND key_id = 9 ORDER BY Count DESC) as "key_2_value",
    MAX(CASE WHEN key_id=10 THEN count ELSE 0.0 END) AS "key_3",
    (SELECT TOP 1 key_value FROM Table1 k3 WHERE k3.name = Table1.name AND key_id = 10 ORDER BY Count DESC) as "key_3_value"
FROM table1 
GROUP BY  name;

嗯...也許:

SELECT distinct name, b.MaxCount, b.Key_Value, c.MaxCount, c.Key_Value, d.MaxCount, d.Key_Value
from table1 a
left join 
(SELECT key_Value, MAX(ifnull((count,0)) as MaxCount from table1 where key_id =8 group by key_Value) b
on a.name = b.name
left join 
(SELECT key_Value, MAX(ifnull((count,0)) as MaxCount from table1 where key_id =9 group by key_Value) c
on a.name = b.name
left join 
(SELECT key_Value, MAX(ifnull((count,0)) as MaxCount from table1 where key_id =10 group by key_Value) d
on a.name = b.name
group by name

我認為您的加入條件。

您遇到IO錯誤。 這可能是因為在SQLITE中,isnull應該為ifnull。 對此表示抱歉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM