2014-10-08 89 views
-1

我需要使用一個查詢,以確定客戶是否已經購買使用SQL查詢100升或更獨特的飲料,到目前爲止,我已經做了:獲取真/假從SQL查詢

 SELECT COUNT(DISTINCT beer_id) 
    FROM Orders 
    WHERE patron_email='[email protected]' 

我如何將考驗這個結果是否是100或更多?

更新:對於模糊的問題抱歉,我需要使用標準的SQL。

+0

你在SQL獨自這樣做,或如PHP任何框架,等等? – 2014-10-08 15:01:41

+0

你想要什麼?你想要獨特的飲料計數,還是真的/假的評價他們是否訂購了超過100件。 – swasheck 2014-10-08 15:09:19

+0

請你能提供預期的產量嗎?這將有很大的幫助。謝謝 – Aramillo 2014-10-08 15:21:11

回答

2

這工作在MySQL,不知道別人:

SELECT COUNT(DISTINCT beer_id) > 100 
FROM Orders 
WHERE patron_email='[email protected]' 

只要把一個布爾條件的SELECT。它將評估爲0爲假或1爲真。

+0

這會在ms sql中給出一個語法錯誤。 – mp3ferret 2014-10-08 15:12:09

1

試試這個:

SELECT COUNT(beer_id) 
    FROM Orders 
    WHERE patron_email='[email protected]' 
group by beer_id 
having COUNT(beer_id) > 100 
+1

這不是回答問題 – Brewal 2014-10-08 15:05:25

+0

@Brewal你能解釋我爲什麼嗎? – Aramillo 2014-10-08 15:07:09

+0

看看標題:] – Brewal 2014-10-08 15:15:49

2

通過使用having條款,如:

SELECT COUNT(DISTINCT beer_id) 
FROM Orders 
WHERE patron_email='[email protected]' 
having count(distinct beer_id) > 100 
1

或一個以上:

select case when (count(distinct beer_id)>100) then 1 
     else 0 end 
    from orders where patron_email='.....' 
+0

呵呵?你怎麼知道他們是一個名字字段 – logixologist 2014-10-08 15:05:28

+1

我忘了改變後首先嚐試它的SQL - 哎呀。你對降低成本的頭腦非常敏感 - 只需花費幾秒鐘就可以改變它 – mp3ferret 2014-10-08 15:06:22

+0

請證明任何降價 - 特別是當這個解決方案有效時( – mp3ferret 2014-10-08 15:20:09

2

你可以使用CASE有一個子查詢其產生單行:

SELECT CASE WHEN (SELECT COUNT(DISTINCT beer_id) 
       FROM Orders 
       WHERE patron_email='[email protected]') > 100 
       THEN 'More than 100' ELSE 'Not more than 100' END As ColumnName 
1

假定T-SQL

DECLARE @result AS INT 
DECLARE @boolean AS INT 

SET @result = (SELECT COUNT(DISTINCT beer_id) 
       FROM Orders 
       WHERE patron_email='[email protected]') 

IF @result > 100 
    BEGIN 
     SET @boolean = 1 
    END 
ELSE 
    BEGIN 
     SET @boolean = 0 
    END    
1

EXISTS運營商產生一個布爾:(?如果是,什麼是RDBMS MSSQL,MySQL和甲骨文,PortreSQL)

SELECT EXISTS (
    SELECT 12345 
    FROM orders 
    GROUP BY customer_id 
    HAVING COUNT(beer_id) > 100 
    ) AS at_least_one_customer_ordered_100_different_beers 
    ;