2012-07-03 55 views
3

比方說,我有電影租房與列的表格:Count中的SQL查詢::參數?

  • 用戶名
  • MovieID
  • Rent_Start_date
  • Rent_Due_Date

我想實現,看起來像一個輸出表:

[UserID, Count of Movies Due in 1 Day, Count of Movies Due in 1 Week] 

這是可能在一個單一的查詢嗎?我目前有一個php腳本,在1天內運行1個查詢,另一個查詢運行1周內的電影。這兩個查詢然後循環每個用戶ID,基本上逐個填充表格。這有點慢。

通過試圖創建僅1查詢此輸出,我想是這樣的:

SELECT UserID, count(movieID) 
    FROM MovieTable 
GROUP BY movieID 

但這好好嘗試創建到期日期的數列。

是否有可能創建一個計數列有爭議,如計數(//所有這些滿足在哪裏Rent_Due_Date - CURDATE() < ONE_WEEK)?

回答

3

你需要將你的結果由用戶,而不是電影:

SELECT UserID, 
     SUM(Rent_Due_Date BETWEEN CURRENT_DATE AND CURRENT_DATE + INTERVAL 1 DAY), 
     COUNT(*) 
FROM  MovieTable 
WHERE Rent_Due_Date BETWEEN CURRENT_DATE AND CURRENT_DATE + INTERVAL 1 WEEK 
GROUP BY UserID 
+0

這會不會做一個表掃描?使用兩個子查詢來提高這些範圍之間的所有行並將它們連接在一起進行主查詢會更高效嗎? – mellamokb

+0

@mellamokb:取決於您在表格中定義的索引。我建議至少在'Rent_Due_Date'列上有一個。 – eggyal

+2

我不認爲根據當前的標準,2個查詢會更有效率,因爲第二天的所有行都在下一週,所以它是重複的工作。然而,添加一個限制結果到計數的​​最大範圍的WHERE子句應該更有效率,在這種情況下,它應該是'WHERE Rent_Due_Date BETWEEN CURRENT_DATE AND CURRENT_DATE + INTERVAL 1 WEEK',然後第二個'SUM'列可能只是'COUNT(*)' – GarethD