给出一组非常标准的相关表,如客户,发票和行项目。我需要进行一项查询,例如“选择所有拥有5个或更多订单项的发票的客户”或“选择所有超过2个发票的客户”或最后“选择所有订单总额超过100美元的客户”< / p>
我现在正在艰难地这样做(手动浏览所有记录),我知道这是最低效的方式,但我不知道足够的SQL来构建这些查询。我正在使用PHP5,MySQL和CakePHP 1.25。
答案 0 :(得分:0)
对于前两个,您可以使用GROUP BY
和HAVING 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