2012-05-30 65 views
1

我使用2個表來的數據相結合,成爲像示出爲下面超前MySQL查詢由

SELECT name, price, MIN(price) AS minprice 
FROM c, cp 
WHERE c.id = cp.id 
GROUP BY id 
ORDER BY minprice = 0, minprice ASC 

對於實施例:作爲數據產生的組1的minprice上述

id  name   price 
1  apple   0 
1  green apple 20 
2  orange   10 
3  strawberry  0 

是0但我不希望最低價格爲零,但這是不合理的,如果我給條件有最小价格> 0原因

我想我的結果變成這樣的

2 orange   10 
1 green apple 20 
3 strawberry  0 

這可能嗎?

回答

0

下面是答案:

SELECT 
    (
    SELECT name 
    FROM yourtable 
    WHERE price = _inner._MIN AND id = _inner.id LIMIT 1 
    ) 
    AS _NAME, 
    _inner._MIN 
FROM 
    (
    SELECT id, IFNULL(MIN(NULLIF(price, 0)),0) AS _MIN 
    FROM yourtable 
    GROUP BY id 
    ) 
    AS _inner 

其中yourtable是你的表的名稱。

MIN(NULLIF(price, 0))允許您計算最小值而不計算零。

IFNULL(<...>,0)這裏只是表示,我們需要一個真正的zero而不是NULL的結果。

LIMIT 1接通的情況下,如果我們具有相同idprice,但不同的names的項目。我想,你可以自由刪除這個聲明。

+0

暈,'_inner._MIN'使用什麼? – user610983

+0

這只是返回的'_inner'子表中用最小項目價格指定計算字段的字段。返回的子表'_inner'充當一個虛擬表,除了我們自己定義它將由哪個字段組成。 – gahcep

+0

'_MIN'只是'IFNULL(MIN(NULLIF(price,0)),0)'字段的別名。 – gahcep