复杂的SQL查询帮助

时间:2009-12-05 15:29:44

标签: php mysql cakephp

给出一组非常标准的相关表,如客户,发票和行项目。我需要进行一项查询,例如“选择所有拥有5个或更多订单项的发票的客户”或“选择所有超过2个发票的客户”或最后“选择所有订单总额超过100美元的客户”< / p>

我现在正在艰难地这样做(手动浏览所有记录),我知道这是最低效的方式,但我不知道足够的SQL来构建这些查询。我正在使用PHP5,MySQL和CakePHP 1.25。

4 个答案:

答案 0 :(得分:0)

对于前两个,您可以使用GROUP BYHAVING COUNT(*)>4,对于最后一个,您可以使用SUM(field)

如果您想要SQL,请展示您的尝试。

答案 1 :(得分:0)

说你有:

customers.id

line_items.user_id

line_items.numItems

查询看起来像:

SELECT * FROM customers
JOIN line_items
ON line_items.user_id WHERE line_items.numItems > 5

您的WHERE子句会根据您想要返回的内容而改变。

暂时没有与SQL Joins合作,但我认为就是这样。

答案 2 :(得分:0)

以下是第二个可以帮助你的人的帮助:

   SELECT customer_id, COUNT(*) AS num_invoices
     FROM invoices
 GROUP BY customer_id 
   HAVING COUNT(*) > 2

答案 3 :(得分:0)

首先加入他们:

select c.id
from customers c
left join invoices i on i.customer_id = c.id
left join lineitems li on li.invoice_id = i.id
group by c.id

要过滤超过5个订单项或更多订单项的客户,请添加:

having count(li.id) >= 5

使用两张或更多张发票过滤客户比较棘手,因为我们正在加入lineitems表。每张发票可能有多行。因此,要仅计算唯一的发票,我们必须将distinct添加到计数中,例如:

having count(distinct i.id) >= 2

要过滤商品超过100美元的客户,请添加:

having sum(li.cost) > 100

您可以在sum内使用数学,以防您存储单独的订单项数量和价格:

having sum(li.itemcount * li.itemcost) > 100