2010-04-27 89 views
0

我目前正在開發一個將根據潛在客戶數據生成報告的程序。我的問題是,我正在運行3個查詢,我只想運行一個查詢。例如,我想收集過去一天產生的線索的數據,我想知道有多少線索總數,以及那個時間段內有多少銷售線索。 (售出= 1 /售出= 0)。問題出現在這個查詢目前正在進行2個查詢,其中一個銷售= 1WHERE銷售= 0銷售WHERE。這一切都很好,但是當我想要在過去一天,一週,一個月,一年以及所有時間生成這些數據時,我將不得不運行10個查詢來獲取這些數據。我覺得這是一個更有效的方式。我知道我可以爲此創建一個mySQL函數,但我不明白這是如何解決這個問題的。 謝謝!是否有可能在mySQL中創建多層WHERE語句

+0

何處> xyz AND sold = 1? – 2010-04-27 22:17:51

+0

我知道如何使用AND和OR語句。我想我想知道是否有一種方法來分組語句返回多個結果集 – Brendan 2010-04-27 22:25:34

回答

1

一種方法做的是利用聚合函數(通常SUMCOUNT幫助你在這種情況下最)隨着MySQL的IF()功能。

例如,可以使用的查詢,例如:

SELECT 
    SUM(IF(sold = 1, sold, 0)) AS TotalSold, 
    SUM(IF(sold = 0, sold, 0)) AS TotalUnsold, 
    SUM(IF(submission_date > (NOW() - INTERVAL 1 WEEK) 
    AND sold = 1, sold, 0) AS TotalSoldThisWeek 
FROM ... 
WHERE ... 

條件(例如sold = 1)可以像要通過使用ANDOR一樣複雜。

Disclamer:代碼沒有經過測試,這只是作爲一個應該稍作修改的例子。

+0

太棒了,我更喜歡這個選擇,它應該適用於使用submission_date>(NOW() - INTERVAL 1 DAY也是 – Brendan 2010-04-27 22:37:58

+0

請參閱我的更新代碼。 – Senseful 2010-04-27 22:40:40

+0

非常感謝您的幫助,使我的生活很容易:) – Brendan 2010-04-27 23:00:12

2

爲什麼不GROUP BY出售讓您獲得總計售出和未售出

+0

真棒,這將解決售出vs未售出的問題。任何方式來做這一天,一週,一個月,一年? – Brendan 2010-04-27 22:31:06

+0

@Brendan:它可能並不比單獨的查詢更有效率,但是可以創建一個臨時表(稱爲'cutoff_times')和5個臨界值,然後執行'main_table AS m JOIN cutoff_times AS t ON m.submission_date> t.cutoff_date'。這是一個'大於連接'而不是通常的等連接。 – 2010-04-27 22:57:28

相關問題