2012-02-08 106 views
2

我有一個表中包含的值:不羣,如果值爲空

row item_id device_token 
1  1   1234 
2  2   2345 
3  1   
4  2   
5  1   
6  1   1234 

我想選擇所有的值,但它們分組由ITEM_ID和device_token。

SELECT ITEM_ID,device_token FROM命中GROUP BY ITEM_ID,device_token

分組上述數據將導致4行,如1,6-行和3,5-將被合併。我可以做一個查詢,它不會將device_token爲空/行的行(第3行和第5行)分組嗎?

+0

通過device_token進行分組應該產生3行。 1234,2345,空 - 不是4. – 2012-02-08 12:32:00

+0

@MarcB:'GROUP BY item_id,device_token' - 它真的是四行 – 2012-02-08 12:38:39

+0

爲什麼你想要這樣的結果?第3行與第5行有何不同? (除了你不想得到的'row'值?) – 2012-02-08 12:44:08

回答

7

如果您不希望device_token爲空的行很容易 - 只需像其他人所建議的那樣使用簡單的WHERE子句。

如果您想同時擁有兩個,那些匹配device_token的組合以及沒有設備令牌的單行,則可以將兩個查詢與UNION組合在一起。還有其他的可能性,但這些相當複雜。

在這裏看到:

SELECT item_id, device_token 
    FROM hits 
    WHERE device_token IS NOT NULL 
    GROUP BY item_id, device_token 
UNION ALL 
SELECT item_id, device_token 
    FROM hits 
    WHERE device_token IS NULL 
0

只需添加這WHERE條款:

SELECT item_id, device_token FROM hits WHERE device_token IS NOT NULL GROUP BY item_id, device_token 
0

你並不需要將它們分組 - 你只需要做SELECT DISTINCT。像這樣:

SELECT DISTINCT item_id, device_token FROM hits WHERE device_token IS NOT NULL 

你想讓空字段出現嗎?

您是否有其他可能需要分組的聚合字段?

請指定一些更多細節 - 也許這不完全是你需要的。

0

如果你真的想這樣,並下令,嘗試這樣的事情。

SELECT item_id, device_token 
FROM (
    SELECT item_id, device_token 
    FROM hits 
    WHERE device_token IS NOT NULL 
    GROUP BY item_id, device_token 

    UNION ALL 

    SELECT item_id, device_token 
    FROM hits 
    WHERE device_token IS NULL 
) AS a 
ORDER BY item_id, device_token