2016-10-13 45 views
5

我有一個問題,在我有條款。我想要兩個總和之間的比較具有相同的出價,但不同的SENS領域 我得到這樣的輸出:MySQL條款與相關的查詢不起作用

SELECT v.bid 
FROM v1 v 
WHERE sens = 'c' 
GROUP BY bid 
HAVING Sum(mont) < (SELECT Sum(l.mont) 
        FROM v1 l 
        WHERE sens = 'd' 
          AND l.bid = v.bid group by l.bid); 

ERROR 1054(42S22):在野外現場「v.bid未知list`

編輯:V1是一個視圖,我用別名L及v試圖靈子查詢主查詢

對不起球員感謝大家對你的答案,我有一個問題wuth原始表中的列現在它解決了:)

+1

發佈'V1'腳本! - >'CREATE VIEW v1 AS ...'??? – sagi

回答

5

不需要兩個選擇從該表中,你可以使用CASE EXPRESSION用於此目的:

SELECT v.bid FROM v1 v 
GROUP BY v.bid 
HAVING SUM(CASE WHEN v.sens = 'c' THEN v.mont ELSE 0 END) < 
     SUM(CASE WHEN v.sens = 'd' THEN v.mont ELSE 0 END) 
    AND COUNT(CASE WHEN v.sens = 'c' THEN 1 END) > 0 
+0

我得到了同樣的錯誤:) – Lilo

+2

這不應該發生:S你在表'v1'中有一列'bid'嗎? @Bili – sagi

+2

@Bili不太可能,除非您在v1表中沒有出價字段。 – Shadow

3

在子查詢的別名是不可見的/可讓你獲得和列沒有發現錯誤,但是可以重構缺乳這樣

select v.bid, t.tot 
     from v1 v 
    Join (
     select bid, sum(mont) tot 
     from v1 
     where sens = 'd' 
     group by bid 
     ) t on t.bid = v.bid 
    where v.sens = 'c' 
    and v.bid < tot 
+0

的SCRIPT不可見yes,但isn更直接的方式來寫這個查詢? – Lilo

+0

@Bili。對不起有一個錯誤的別名..我有更新查詢.. – scaisEdge

+0

@ Bill對我來說這種查詢(使用聚合函數在聯接是一個強大的方式來篩選和選擇混合值(聚合和不聚合)從不同的選擇表 – scaisEdge

0

我與列的可見性的問題,因爲有人不恰當地宣佈,我道歉的傢伙:「(我很內疚:(

腳本:

mysql> select * from op; 
+------+------+------+------+ 
| bid | cid | sens | mont | 
+------+------+------+------+ 
| 1 | 1 | c | 2000 | 
| 1 | 1 | c | 2000 | 
| 1 | 1 | c | 2000 | 
| 1 | 1 | c | 2000 | 
| 1 | 2 | c | 2000 | 
| 1 | 3 | c | 2000 | 
| 2 | 3 | c | 2000 | 
| 1 | 1 | d | 2000 | 
| 2 | 3 | d | 4000 | 
+------+------+------+------+ 
9 rows in set (0.00 sec) 


create view v1 as (select bid , cid , sens , sum(mont) as sumcli from op group by bid,cid,sens); 

mysql> select * from v1 ; 
+------+------+------+--------+ 
| bid | cid | sens | sumcli | 
+------+------+------+--------+ 
| 1 | 1 | c | 8000 | 
| 1 | 1 | d | 2000 | 
| 1 | 2 | c | 2000 | 
| 1 | 3 | c | 2000 | 
| 2 | 3 | c | 2000 | 
| 2 | 3 | d | 4000 | 
+------+------+------+--------+ 
6 rows in set (0.00 sec) 

mysql> SELECT v.bid 
    -> FROM v1 v 
    -> WHERE sens = 'c' 
    -> group by v.bid 
    -> HAVING Sum(v.sumcli) < (SELECT Sum(l.sumcli) 
    ->      FROM v1 l 
    ->      WHERE sens = 'd' 
    ->       AND l.bid = v.bid group by l.bid); 
+------+ 
| bid | 
+------+ 
| 2 | 
+------+ 
1 row in set (0.00 sec) 
+1

歡迎來到StackOverflow。您應該編輯您的問題以便將視圖聲明放在那裏,而不是回覆細節,因爲它有必要重現您得到的錯誤。然後,在你的回答中,你可以真正指出問題以及如何解決(但不會引入新的細節,屬於問題的細節)。 –

+0

謝謝老兄,我是新來的,所以再次抱歉:) – Lilo

+0

不用擔心,我們都必須學習一天^^ –