2012-02-29 51 views
0

我有一個「更新」表中可以包含重複的描述,我想用自己的計數一起返回重複的,所以我創造了這個查詢:查詢返回重複的記錄頻率

SELECT description, count(description) AS count 
FROM updates INNER JOIN participations ON participations.update_id = updates.id 
INNER JOIN customer ON customer.id = participations.customer_id 
INNER JOIN garages ON garages.id = customer.garage_id 
WHERE (updates.created_at >= DATE_SUB(CURDATE(), INTERVAL 6 MONTH)) 
AND garages.`id` = 1 
GROUP BY description 
ORDER BY count desc 
LIMIT 10 

計數返回的不是我所期待的。我相信之所以會這樣,是因爲許多客戶可以共享更新,所以我得到重複的原因是表中存在實際的重複項,並且因爲同一更新記錄多次返回。如何修復查詢以便它只計算更新表中的實際重複描述字段。由於

回答

1

你可以重寫查詢使用EXISTS,因爲你需要的客戶只是去車庫:-)

SELECT description, count(description) AS count 
FROM updates 
WHERE (updates.created_at >= DATE_SUB(CURDATE(), INTERVAL 6 MONTH)) 
AND EXISTS (select null from participations INNER JOIN customer ON customer.id = participations.customer_id WHERE participations.update_id = updates.id AND customer.garage_id = 1) 
GROUP BY description 
ORDER BY count desc 
LIMIT 10 
+0

這是偉大的尼古拉,工作一種享受,謝謝。我想知道你是否會善意地通過它談論我?特別是「EXISTS」和「select null」謝謝 – pingu 2012-02-29 22:13:03

+1

不客氣。存在測試,如果子查詢返回任何記錄,所以我們使用它來確保「參與者」來自車庫1.子查詢通過過濾參與連接到主查詢.update_id = updates.id。至於null,我們實際上並不需要這些記錄中的任何數據,只是它們的存在;因此我們返回單列的空值。這可能並不是重要的性能方面,因爲sql引擎不會選擇任何數據,但留給自己一個提醒,我們實際上並沒有選擇任何東西。 – 2012-03-01 00:05:02

+0

非常感謝! – pingu 2012-03-01 08:13:56