首页 > 解决方案 > MYSQL - 将 GROUP 与 JOIN 一起使用

问题描述

所以这个语句在没有连接的情况下开始,它只是查找产品表并按 item_code 分组结果。

SELECT a.item_code,
       a.price,
       b.v_no
FROM product a
JOIN variation b ON a.item_code = b.item_code
WHERE a.price>=2
GROUP BY a.item_code

现在我已经添加了我想按 v_no 分组的连接,但前提是数据 v_no 存在。这是因为并非表中的每个项目在product表中都有相应的条目variation。因此,item_code对“普通”产品进行分组,但如果存在v_no则按 THEN分组。item_codev_no

以下不起作用:

SELECT a.item_code,
       a.price,
       b.v_no
FROM product a
JOIN variation b ON a.item_code = b.item_code
WHERE a.price>=2
GROUP BY b.v_no,
         a.item_code

分组仍然存在,item_codev_no分组被忽略。

标签: mysqlsql

解决方案


  • 为了考虑所有产品(有/无变化),您需要更改为LEFT JOIN.
  • 对于条件分组依据,您可以使用Coalesce()函数;它将考虑分组依据的第一个非空值。

尝试以下操作:

SELECT a.item_code,
       a.price,
       b.v_no
FROM   product a
       LEFT JOIN variation b
         ON a.item_code = b.item_code
WHERE  a.price >= 2
GROUP  BY COALESCE(b.v_no, a.item_code)

推荐阅读