【发布时间】:2016-03-22 06:43:20
【问题描述】:
标题并不能很好地描述我需要从查询中得到什么。
@sgeddes 帮助我提出了以下查询,但查询需要进行一些更改才能满足我的需求。我还稍微修改了查询以不选择已删除的客户,但由于此查询的编写方式超出了我的 SQL 知识范围,我无法进行太大更改。
SELECT d.customer_id,d.fname,d.lname,d.isactive,
o.lastdate,
Count(o2.order_id) AS 'total_orders'
FROM customers d
LEFT JOIN (SELECT MAX(order_id) order_id, customer_id
FROM orders
GROUP BY customer_id) m on d.customer_id = m.customer_id
LEFT JOIN orders o on m.order_id = o.order_id
LEFT JOIN orders o2 on d.customer_id = o2.customer_id
AND o2.balance > 0 AND o2.isActive > -1
WHERE d.user_id =945766 AND d.isActive > -1
AND o2.customer_id IS NULL
GROUP BY d.customer_id
我需要以下三个条件。
- isActive > -1 的客户订单计数(-1 = 已删除)
- 客户不在订单表中(没有订单的客户)。
- isActive = 0 的客户及其对应的订单数
简而言之,我只需要 isActive = 0 的客户,并为 total_orders 列获得实际的 #。
为了更好地帮助您理解我的要求,我创建了一个 SqlFiddle。
【问题讨论】:
-
可能是这个查询是为其他目的而设计的,即使您需要一个简单的查询,编辑它也可能更复杂......所以请告诉我们您的要求。
-
所以您想要 3 个单独的查询来获得 3 个单独的结果?
-
@草莓。我正在使用由 UNION 合并的 3 个单独的查询,正如 sgeddes 在我之前的帖子中所建议的那样,我开始使用他的查询版本。
-
但是 3 个单独的查询有什么问题?
-
@ZafarMalik 我相信如此,因为在我之前关于此要求的帖子中,我首先并不清楚我的所有要求。请看这个帖子stackoverflow.com/questions/36051226/…