2014-06-06 104 views
1

我目前正在做一個sql問題。簡單的sql計數和子查詢

問:使用產品表,找出只生產一個型號的製造商的數量。

數據庫方案包括四個表: 產品(製造者,型號,類型)

表「產品」包括關於製造者,型號,和類型(「PC」,「膝上型計算機」的信息,或「打印機」)。假定產品表中的型號對於所有制造商和產品類型都是唯一的。

的查詢:

select count(maker) from product group by maker having count(model)=1 

Select count(*) from (select maker from product group by maker having count(model)=1)as A 

我想知道是什麼,他們看起來是一樣的,以我這兩個查詢之間的區別,但apprently第二個是正確的答。

+0

沒有兩個是不同將首先給計數每個製造商,並會給行的deoends多少製造商你第二次將給所有制造商,一種模式,並將導致一個單一的行 –

+1

你有製造商的任何NULL? COUNT(column_name)忽略列名中的空值,COUNT(星號)會爲您提供一個連續的行數。如果您將頂部查詢更改爲COUNT(星號)並獲得相同結果,那麼我敢打賭就是這個問題。 – VBlades

回答

3

讓我們看看第一個查詢。

create table product (maker int not null, model int not null); 
insert into product (maker, model) values (1,1),(1,2),(2,1),(3,1),(4,1),(5,1); 

select maker from product group by maker having count(model)=1 
MAKER  
------- 
     2 
     3 
     4 
     5 

即製造商2,3,4,5只有一個產品。

select count(maker) from product group by maker having count(model)=1 

各廠商出現的,即

------- 
     1 
     1 
     1 
     1 

在另一方面,其他查詢,會算多少廠商有:

select count(*) from (select maker from product group by maker having count(model)=1) 

-------- 
     4 
+1

現在,如果只有OP已經做到了 – Strawberry