代码之家  ›  专栏  ›  技术社区  ›  Backen

MySQL GROUP BY ignore或skip other null列

  •  1
  • Backen  · 技术社区  · 7 年前

    我有一张桌子:

    (id, storage_id, product_id, quantity, property_storage_group_id)
    

    enter image description here

    我需要最小数量,但什么时候 prouct_id 是几个,我需要忽略 product_id 具有 property_storage_group_id = null .

    类似这样:

    SELECT MIN(quantity), product_id
    FROM storage_quantity
    WHERE storage_id = 6 
    GROUP BY product_id
    

    但没有身份证22,身份证27。

    1 回复  |  直到 3 年前
        1
  •  0
  •   Racil Hilan    7 年前

    可以使用子查询。尝试以下操作:

    SELECT MIN(s1.quantity), s1.product_id
    FROM storage_quantity s1
    WHERE s1.id NOT IN (SELECT s2.id
                        FROM storage_quantity s2
                        WHERE s2.product_id = s1.product_id
                          AND s2.storage_id = s1.storage_id
                          AND s2.property_storage_group_id IS NULL
                          AND (SELECT COUNT(s3.property_storage_group_id)
                             FROM storage_quantity s3
                             WHERE s3.product_id = s2.product_id
                               AND s3.storage_id = s2.storage_id
                            ) > 0
                       )
    WHERE s1.storage_id = 6
    GROUP BY s1.product_id
    

    第二个子查询利用以下事实: COUNT() 函数自动忽略 NULL 值,因此它只返回 property_storage_group_id 那不是 无效的 . 如果该计数大于零,则第一个子查询将选择具有 property_storage_group_id IS NULL 为此 product_id . 最后,主查询排除了第二个查询返回的记录。