2016-02-24 50 views
1

我有一個表users具有這種結構:sqlite3的:通過具有X計數團(Y> N)

id | user  | offset 
0 | alvin | -1  
1 | alvin | -2 
2 | alvin | 5 
3 | alvin | 6 
4 | simon | -5 
5 | simon | -4 
6 | theodore | -1 
7 | theodore | 1 

欲返回其具有至少至少1正項和不同的用戶名的查詢在offset中有1個否定條目。在這個例子中,查詢將返回「alvin」和「theodore」而不是「simon」。

我看過一些其他職位有關GROUP BYHAVINGCOUNT(),以及它們的組合,但他們都不來解決這個想法來自一個條件語句計數真實回報的數量。尤其是,我認爲我誤解了如何將count()等集合函數併入WHERE子句(或者甚至可能)。當我嘗試類似:

SELECT user FROM users WHERE count(offset > 0) > 0; 

我得到一個錯誤:misuse of aggregate function count()

(我知道這種說法並不完全指定我想查詢 - 它意味着更多的我是多麼已經指示試圖解決這個問題。)

我來自Python/Pandas的心態,可能只是這種方法不能很好地轉化爲SQL。

任何建議非常感謝!

回答

0

這可能與compound query來完成:

SELECT user 
FROM users 
WHERE offset > 0 
UNION 
SELECT user 
FROM users 
WHERE offset < 0; 

它實際上是可以使用的聚合函數。 但是,COUNT()計數爲;要計算別的東西,使用布爾表達式(返回0或1)和SUM()是更好的主意:

SELECT user 
FROM users 
GROUP BY user 
HAVING SUM(offset < 0) > 0 
    AND SUM(offset > 0) > 0; 
+0

謝謝,那個工作得很漂亮! Re:你的第二個解決方案,我需要在'GROUP BY'之後加上'HAVING',否則我會出錯。 –