使用嵌套计数,加入或拥有查找行

时间:2011-03-03 05:35:29

标签: mysql sql count

我在表格中有数据可能如此:


    id | streetnum | name | item
    -----------------------------
    1  | 100       | a    | 0
    2  | 100       | b    | NULL
    3  | 100       | c    | NULL
    4  | 101       | d    | NULL
    5  | 101       | e    | NULL
    6  | 102       | f    | 1

我正在尝试组合一个查询,该查询将识别相同的streenum,其中item列具有值和一个或多个NULL。在上面的示例中,查询的结果应为:
100

我的第一直觉是整理一个涉及count(*)的嵌套查询,但我想知道你们想出的其他想法。

3 个答案:

答案 0 :(得分:1)

也可以使用自我加入:

SELECT DISTINCT streetnum FROM atable AS a1,atable AS a2 WHERE a1.streetnum=a2.streenum AND a1.item IS NULL AND a2.item IS NOT NULL;

答案 1 :(得分:0)

这是一个在SQLServer中运行的查询。我还没有测试过mysql的语法。

SELECT streetnum FROM YourTable
WHERE streetnum IN
 (SELECT streetnum FROM YourTable
  WHERE item IS NULL 
  GROUP BY streetnum) 
AND streetnum IN
 (SELECT streetnum FROM YourTable
  WHERE item IS NOT NULL 
  GROUP BY streetnum)
GROUP BY streetnum

答案 2 :(得分:0)

SELECT streetnum
FROM atable
GROUP BY streetnum
HAVING MAX(item) IS NOT NULL
  AND COUNT(CASE WHEN item IS NULL THEN 1 END) > 0

MAX(item)可以由MIN(item)SUMAVG替换。此部分条件也可以由COUNT(item) > 0替换。

更棘手的部分是您必须考虑NULL s的存在。在这里,您必须使用CASE,因为您需要将NULL转换为值才能在聚合中使用它。一旦它成为一个值,您就可以COUNTSUM它(MAXMIN等也可以。)