2013-10-21 139 views
0

在MySQL - 表是這樣的:獲取名稱 - 值對ID的計數時,名稱不存在

ID Name Value 

1 Color Blue 
1 Weight 50 
1 Type Fruit 
2 Color Red 
2 Weight 40 
3 Color Yellow 

我想不同的ID具有的「類型的名稱/特性的數'和不同的身份證號碼。第一個(這樣做)很容易,因爲它被定義了,但是如果我做一個select count(獨特的ID),其中名稱<>'type' - ID 1仍然是該計數的一部分,因爲它具有其他行/屬性<>'type'。

在這個例子中 - distinct count ='type'的理想結果是1(ID 1),對於不同的計數<>'type'將是2(ID的2 & 3)。

在此先感謝。

+0

如果你wa nt都計數,爲什麼不簡單地從組的總數中減去具有'Type'特性的組的數量? – eggyal

回答

-1
SELECT CASE 
      WHEN Name='Type' THEN 'Type' 
      ELSE 'Non-Type' 
     END Name 
     ,ID 
     ,COUNT(ID) 
FROM Stuff 
GROUP BY 
    CASE 
      WHEN Name='Type' THEN 'Type' 
      ELSE 'Non-Type' 
    END 
    ,ID 

SQLFiddle

0
SELECT id FROM test GROUP BY id HAVING 
CONCAT(",",CONCAT(GROUP_CONCAT(name), ",")) 
NOT LIKE '%,Type,%' 

會給你所有的ID不Typehttp://sqlfiddle.com/#!2/30837/1

(的毗連與,保證,你是不是偶然匹配XType)。

SELECT COUNT(id) AS count, GROUP_CONCAT(id) AS ids 
FROM(SELECT id, count(name) as count FROM test 
GROUP BY id HAVING CONCAT(",",CONCAT(GROUP_CONCAT(name), ",")) 
NOT LIKE '%,Type,%') as temp; 

會給你想要的計數:http://sqlfiddle.com/#!2/30837/9

0

IDS對於此特定任務,您可以使用:

select count(distinct ID) from table 
where ID in (select ID from table where name='type') --- this will give you count of IDs where type exists 

select count(distinct ID) from table 
where ID not in (select ID from table where name='type') -- this will give you count of IDs without type