給定一組非常標準的相關表,如Customers,Invoices和Line Items。我需要提供一個查詢,例如「選擇所有具有5個或更多訂單項的發票的客戶」或「選擇所有擁有2個以上發票的客戶」或最後選擇「所有訂單項總額超過100美元的客戶」複雜的SQL查詢幫助
我現在正在努力實現這一目標(手動遍歷所有記錄),我知道這是最低效的方法,但我不知道構建這些查詢的足夠的SQL。我使用PHP5,MySQL和CakePHP 1.25。
給定一組非常標準的相關表,如Customers,Invoices和Line Items。我需要提供一個查詢,例如「選擇所有具有5個或更多訂單項的發票的客戶」或「選擇所有擁有2個以上發票的客戶」或最後選擇「所有訂單項總額超過100美元的客戶」複雜的SQL查詢幫助
我現在正在努力實現這一目標(手動遍歷所有記錄),我知道這是最低效的方法,但我不知道構建這些查詢的足夠的SQL。我使用PHP5,MySQL和CakePHP 1.25。
開始通過將它們放在一起:
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
對於前兩個,您可以使用GROUP BY
和HAVING COUNT(*)>4
,對於最後一個,您可以使用SUM(field)
。
如果你想要SQL,那麼請顯示你的嘗試。
假設您有:
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一起工作,但我認爲這是類似的東西。
下面是一些幫助,第二個應該讓你去:
SELECT customer_id, COUNT(*) AS num_invoices
FROM invoices
GROUP BY customer_id
HAVING COUNT(*) > 2