我在表格中有数据可能如此:
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(*)的嵌套查询,但我想知道你们想出的其他想法。
答案 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)
或SUM
或AVG
替换。此部分条件也可以由COUNT(item) > 0
替换。
更棘手的部分是您必须考虑NULL
s的存在。在这里,您必须使用CASE
,因为您需要将NULL
转换为值才能在聚合中使用它。一旦它成为一个值,您就可以COUNT
或SUM
它(MAX
,MIN
等也可以。)