我很難完全知道如何在MySQL中完成以下操作,而且我已經採取了我的結果集並在之後用ruby操作它,這似乎並不理想。MySQL的查詢項目的平均價格是否小於X?
這是問題。隨着像「項目」的數據集:
id state_id price issue_date listed
1 5 450 2011 1
1 5 455 2011 1
1 5 490 2011 1
1 5 510 2012 0
1 5 525 2012 1
...
我想要得到的東西像:
SELECT * FROM items
WHERE ([some conditions], e.g. issue_date >= 2011 and listed=1)
AND state_id = 5
GROUP BY id
HAVING AVG(price) <= 500
ORDER BY price DESC
LIMIT 25
基本上我想要抓住一個項目的「組」下,其平均價格下降一定的門檻。我知道我上面的例子「group by」和「having」是不正確的,因爲它只會給AVG(price)
這個項目,這沒有意義。我只是想說明我想要的結果。
這裏最重要的是我想在我的結果集中的單個項目的所有,我不只是希望看到一個行的平均價格,總等
目前我只是在沒有HAVING AVG(price)
的情況下進行上述查詢,並逐個添加單個項目(以紅寶石形式),直到達到所需的平均值。如果我能弄清楚如何在SQL中執行此操作,那將非常棒。使用子查詢或聰明的東西如將表加入自身當然是可接受的解決方案,只要它們工作的很好!謝謝!
更新:在回答都鐸王朝的回答下面,這裏有一些澄清。除了目標平均值之外,總會有一個目標數量。而且我們總是會按照價格從低到高排序,並按日期排序。
因此,如果我們確實有10件商品的價格都是5美元,而我們想要查找5件商品的平均< 6美元,我們只需返回前5件商品。我們不會返回第一個,而且我們也不會返回與前兩個分組在一起的前三個。這基本上是我的代碼在Ruby中的工作。
感謝您的回答。這是對發生的事情的一個很好的解釋,但請查看我的最新問題以獲得澄清。例如,我們可能會有一個「3」的目標數量,在這種情況下,會有一個「正確的」答案:{1,2,3}。如果找不到精確的匹配,我確實想做一些事情,比如找到「最接近的匹配」,但這可以通過附加查詢來完成。 – kaptron 2012-02-05 01:43:00
再次感謝。我認爲你真的已經掌握了這個問題。我不確定我的原始方法是否正確,但您肯定指出我正確的方向。 – kaptron 2012-02-06 05:36:31
我很高興它幫助:) – 2012-02-06 07:46:38