SQL-如何将两个表与两个具有不同条件的表计数组合在一起

时间:2016-05-03 18:07:38

标签: mysql sql join

在文本中查询:“显示所有活动用户及其输入的已完成订单+指定日期范围内已分配的已完成订单”。

这是我设法只用一次计数创建的查询

SELECT u.firstname, u.lastname, COUNT(l.id) AS totalCompleted
        FROM users u
        LEFT JOIN orders l
        ON l.idDispatcher = u.id
        WHERE u.disabled = '0'
        AND l.smallStatus='1'
        AND l.dateAdded >= :from
        AND l.dateAdded <= :to
        GROUP BY u.firstname;

这为我提供了用户被分配到订单的所有订单:

LEFT JOIN orders l
 ON l.idDispatcher = u.id

我需要将此查询与COUNT(l.id)基于的另一个查询结合起来:

LEFT JOIN orders l
 ON l.addedById= u.id

当我尝试这个时:

LEFT JOIN orders l
 ON l.idDispatcher = u.id AND l.addedById= u.id

COUNT(l.id)结合了分配的订单和用户添加的订单的结果,当我需要它有两个不同的数字时。我也尝试在COUNT中添加条件,但没有成功

1 个答案:

答案 0 :(得分:0)

我不确定我是否完全理解,但如果你说你让它使用两个单独的查询,你需要两个计数,那么只需将结果合并在一起吗?

但是,如果您需要根据两个不同的条件对所有匹配进行一次计数,请在您的联接中使用“OR”而不是“AND”:

SELECT u.firstname, u.lastname, COUNT(l.id) AS totalCompleted
    FROM users u
    LEFT JOIN orders l
    ON l.idDispatcher = u.id
       or l.addedById= u.id
    WHERE u.disabled = '0'
    AND l.smallStatus='1'
    AND l.dateAdded >= :from
    AND l.dateAdded <= :to
    GROUP BY u.firstname, u.lastname;
相关问题