mysql 如果值为空则不分组

ujv3wf0j  于 5个月前  发布在  Mysql
关注(0)|答案(4)|浏览(53)

我有一个表,其中的值如下:

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为空/null的行(行3和5)进行分组吗?

vojdkbi0

vojdkbi01#

如果你不想要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

字符串

o4tp2gmn

o4tp2gmn2#

只需添加WHERE子句:

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

字符串

bwitn5fc

bwitn5fc3#

您不需要对它们进行分组,只需执行SELECT DISTINCT。如下所示:

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

字符串
是否要显示空字段?
是否存在可能需要分组的其他聚合字段?
请详细说明-可能这不是您所需要的。

du7egjpx

du7egjpx4#

如果你真的想要这个,并下令,尝试这样的东西。

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

字符串

相关问题