mysql 如果值为空则不分组

ujv3wf0j  于 2024-01-05  发布在  Mysql
关注(0)|答案(4)|浏览(211)

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

  1. row item_id device_token
  2. 1 1 1234
  3. 2 2 2345
  4. 3 1
  5. 4 2
  6. 5 1
  7. 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将合并组合两个查询:

  1. SELECT item_id, device_token
  2. FROM hits
  3. WHERE device_token IS NOT NULL
  4. GROUP BY item_id, device_token
  5. UNION ALL
  6. SELECT item_id, device_token
  7. FROM hits
  8. WHERE device_token IS NULL

字符串

o4tp2gmn

o4tp2gmn2#

只需添加WHERE子句:

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

字符串

bwitn5fc

bwitn5fc3#

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

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

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

du7egjpx

du7egjpx4#

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

  1. SELECT item_id, device_token
  2. FROM (
  3. SELECT item_id, device_token
  4. FROM hits
  5. WHERE device_token IS NOT NULL
  6. GROUP BY item_id, device_token
  7. UNION ALL
  8. SELECT item_id, device_token
  9. FROM hits
  10. WHERE device_token IS NULL
  11. ) AS a
  12. ORDER BY item_id, device_token

字符串

展开查看全部

相关问题