1
我在這個MySQL查詢問題中有點遺失,這涉及到計算由交付客戶訂單的分支分組的每個實例cust.category
。如果客戶在同一個月內有多個訂單,則根據他們可能進行的訂單數量來添加cust.category
。是否有可能將cust.category
的計數限制爲僅用於的唯一用戶?MYSQL:只在用戶是唯一的情況下計數類別實例
樣品表
Customer table
id name category nearestbranch created
------ ------ --------- ------------- -------------------
1 John Engineer 3 2014-09-10 18:10:10
2 Mary Developer 4 2014-09-10 18:10:10
-------------------------------------------------------------
Orders table
id delivery_date customer_id
------ ------------- -----------
1 2014-09-01 1
2 2014-09-02 2
3 2014-09-03 1
-----------------------------------
我的查詢:
SELECT cust.nearestbranch,
SUM(IF(cust.category = 'Engineer', 1, 0)) eng,
SUM(IF(cust.category = 'Developer', 1, 0)) dev
FROM customers cust
LEFT JOIN orders ON cust.id = orders.customer_id
WHERE DATE_FORMAT(orders.delivery_date, '%Y-%m') = '2014-09'
GROUP BY cust.nearestbranch
代替,但得到這個(ENG = 1)
nearestbranch eng dev
------------- ------ ------
3 1 0
4 0 1
我得到這個(ENG = 2)
nearestbranch eng dev
------------- ------ ------
3 2 0
4 0 1
驚人的算!有用。雖然我對使用'distinct'非常謹慎。它沒有使用更多的資源,或者我聽說過嗎? – enchance 2014-09-11 14:20:19
@enchance我想我不會影響你的查詢爲什麼不在你的生產服務器上運行這個查詢也在on子句中索引列會更好,還要改變where子句'WHERE orders.delivery_date> ='2014-09-01 'AND orders.delivery_date <='2014-09-30''如果你有一個索引on delivery_date,這個where子句將使用它,因爲你當前的索引不會被使用看到[* sargable *])(http ://en.wikipedia.org/wiki/Sargable)以供參考,問候 – 2014-09-11 14:41:09