2012-04-25 77 views
1

我有一个SQL表与一些值。选择具体数值的计数

 
NAME   ELEMENT 
122601:1ZIN:AP5|N 
122601:1ZIN:AP5|N 
122601:1ZIN:AP5|C 
122601:1ZIN:AP5|N 
122601:1ZIN:AP5|N 
122601:1ZIN:AP5|N 
123440:1ZPD:CIT|C 
123440:1ZPD:CIT|O 
123440:1ZPD:CIT|O 
123440:1ZPD:CIT|C 
123440:1ZPD:CIT|C 
123440:1ZPD:CIT|O 
123440:1ZPD:CIT|O 
123440:1ZPD:CIT|C 

如何仅选择C和O的计数大于2的名称?哪里没有C和O?

+0

什么_“和哪里有什么比C和O?”_是什么意思? – gdoron 2012-04-25 13:30:21

+0

这意味着我们只想选择那些ELEMENT == C或ELEMENT == O – annndrey 2012-04-25 13:49:06

+0

@annndrey的行:你能添加你想要的结果吗?你试过了什么? – 2012-04-25 13:50:44

回答

0

这应该为你做:

SELECT NAME FROM TABLE WHERE ELEMENT IN (SELECT ELEMENT     
FROM TABLE WHERE ELEMENT IN('C', 'O') GROUP BY ELEMENT     
HAVING COUNT(ELEMENT) > 2) 
+0

@gdoron:这有'SELECT元素',你有'SELECT Name'。 – 2012-04-25 13:49:20

+0

@ypercube ...我不明白你的意见。我相信annndrey想选择名字。 – MikeTWebb 2012-04-25 14:02:44

+0

是的,目标是检索具有特定元素的名称,如果特定元素 – annndrey 2012-04-25 14:07:34

0
SELECT T.NAME 
FROM TABLE_NAME T 
WHERE T.ELEMENT IN (SELECT TT.ELEMENT 
        FROM TABLE_NAME TT 
        WHERE TT.ELEMENT IN ('C', 'O') 
        GROUP BY TT.ELEMENT 
        HAVING COUNT(TT.ELEMENT) > 2) 
+0

**为什么选择了投票?**如果你没有评论,你没有做任何事情,但是没有做任何事情,只是丢失了一个代表点... – gdoron 2012-04-25 13:25:16

+0

@不会出现这个错误,因为TT.Name不在分组列表中? – MikeTWebb 2012-04-25 13:41:56

+0

@Gdoron:有何评论? – 2012-04-25 14:00:24

0

不知道这些是最优化的,但...

如果有超过2 C的

SELECT NAME, LENGTH(ELEMENT) - LENGTH(REPLACE(ELEMENT, 'C', '')) as countC FROM table HAVING countC > 2; 

只有C和在O元素的

SELECT NAME, ELEMENT REGEXP "^[CO]+$" AS hasCO FROM table having hasCO = 1; 

未经测试,但我认为他们是正确的