【问题标题】:Showing COUNT in LEFT JOIN subquery?在 LEFT JOIN 子查询中显示 COUNT?
【发布时间】:2011-08-30 18:48:42
【问题描述】:

我有一个查询,在选定的时间段内选择订单信息。我想包含一个 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)按customers_id。然后在 where 子句中包含一个 'HAVING order_count

这可能吗?这有意义吗?

【问题讨论】:

    标签: php mysql subquery left-join


    【解决方案1】:

    只要在你关闭的地方添加这个:

    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
    

    【讨论】:

    • 这帮助我解决了我也遇到的问题。感谢:)的回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    相关资源
    最近更新 更多