我的表格中包含以下值:
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 :(得分: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
答案 1 :(得分:0)
只需添加此WHERE
子句:
SELECT item_id, device_token FROM hits WHERE device_token IS NOT NULL GROUP BY item_id, device_token
答案 2 :(得分:0)
您不需要对它们进行分组 - 您只需要执行SELECT DISTINCT
。像这样:
SELECT DISTINCT item_id, device_token FROM hits WHERE device_token IS NOT NULL
你想要空字段吗?
您是否有其他可能需要分组的聚合字段?
请详细说明一些细节 - 可能并不完全符合您的需求。
答案 3 :(得分: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