我有一个查询,用于选择所选时间段之间的订单信息。我想要包含一个where子句,它将订单信息限制为所有只有1个订单总数的订单(通过所有时间)。
这是我到目前为止所做的:
SELECT o.orders_id, o.customers_id, o.customers_name, o.payment_method, o.date_purchased,o.orders_status, o.shipping_status, ot.value
FROM orders as o
LEFT JOIN orders_total as ot ON o.orders_id = ot.orders_id
WHERE date_purchased between '2011-07-30' AND '2011-08-30 23:59:59'
AND ot.class = 'ot_total'
AND o.customer_service_id = ''
OR o.customer_service_id IS NULL
ORDER BY orders_id DESC
此查询为我提供指定时间段内的所有订单。我需要包含一个子查询(或类似的东西)来计算所有先前(通过所有时间)订单(order_count)BY customers_id。然后包括'HAVING order_count<在where子句中的2'。
这可能吗?这有意义吗?
答案 0 :(得分:2)
只需在你关闭的地方添加:
AND (
SELECT COUNT(o.id)
FROM orders o2
WHERE o2.customers_id = o.customers_id
) < 2
或者,如果要返回订单计数,请将其添加到SELECT子句中,然后添加HAVING子句:
SELECT o.orders_id, ..., (
SELECT COUNT(o.id)
FROM orders o2
WHERE o2.customers_id = o.customers_id
) as orders_count
...
HAVING orders_count < 2