Select 其他列有两个特定值时的值
Select a value when other column has two specific values
我找不到完成这项工作的方法:我需要获得所有具有 id2
''(empty string)
的 id1
以及至少一个非空的 id2
.
我得到的是:SELECT id1, id2 FROM mytable WHERE id1 = ... GROUP BY id1,id2
id1 id2
1 b2-04af1ab73705-fb8000-006bfb81a78e5e5920
2 b2-04af1ab73705-fb8000-006bfb81a78e5e5920 5835113447594857813
所以现在我需要得到这个 id1
。我尝试了很多东西,但我得到的最接近的是 true
或 false
如果满足条件,但无法获得相应的 id1
- 我需要它,因为我想 运行 这在更大的集合上(不是 mytable
在 id1=...
上的子集)。
当我这样尝试时:
SELECT if(sum(if(tab1.id1 != '', 1, 0)) < count(tab1.id2), tab1.id1,false) as myguy
FROM
( SELECT id1,id2
FROM mytable
WHERE id1 = 'b2-04af1ab73705-fb8000-006bfb81a78e5e5920'
GROUP BY visitorid,platformvisitorid
) AS tab1
,我收到此错误:Line 1:103 Expression not in GROUP BY key 'visitorid'
并且无法找到解决方法。
有什么想法吗?
编辑:
在 Dennis 的帮助下解决了如下问题:
SELECT tab4.id1 FROM
(SELECT tab1.id1 FROM (SELECT id1, id2 FROM mytable GROUP BY id1, id2) tab1 WHERE id2!='') tab3
INNER JOIN
(SELECT tab2.id1 FROM (SELECT id1, id2 FROM mytable GROUP BY id1, id2) tab2 WHERE id2='') tab4
ON (tab3.id1 = tab4.id1)
编辑
显然可以一次完成此操作,从而防止污染您的数据库。查看@Dudu Markovitz 的回答
可能可以将其构建到 1 个语句中,从而消除临时表(或视图)的创建。
CREATE TABLE tempa AS SELECT DISTINCT id1 from mytable where id2 = '';
CREATE TABLE tempb AS SELECT DISTINCT id1 from mytable where id2 != '';
SELECT tempa.id1 FROM tempa INNER JOIN tempb on tempa.id1 = tempb.id1;
请注意 'not empty' 不是一个明确的定义,因此您可能需要调整第二行中的 where 语句以满足您的需要。
select id1
from mytable
group by id1
having count(case when id2 = '' then 1 end) > 0
and count(case when id2 <> '' then 1 end) > 0
我找不到完成这项工作的方法:我需要获得所有具有 id2
''(empty string)
的 id1
以及至少一个非空的 id2
.
我得到的是:SELECT id1, id2 FROM mytable WHERE id1 = ... GROUP BY id1,id2
id1 id2
1 b2-04af1ab73705-fb8000-006bfb81a78e5e5920
2 b2-04af1ab73705-fb8000-006bfb81a78e5e5920 5835113447594857813
所以现在我需要得到这个 id1
。我尝试了很多东西,但我得到的最接近的是 true
或 false
如果满足条件,但无法获得相应的 id1
- 我需要它,因为我想 运行 这在更大的集合上(不是 mytable
在 id1=...
上的子集)。
当我这样尝试时:
SELECT if(sum(if(tab1.id1 != '', 1, 0)) < count(tab1.id2), tab1.id1,false) as myguy
FROM
( SELECT id1,id2
FROM mytable
WHERE id1 = 'b2-04af1ab73705-fb8000-006bfb81a78e5e5920'
GROUP BY visitorid,platformvisitorid
) AS tab1
,我收到此错误:Line 1:103 Expression not in GROUP BY key 'visitorid'
并且无法找到解决方法。
有什么想法吗?
编辑:
在 Dennis 的帮助下解决了如下问题:
SELECT tab4.id1 FROM
(SELECT tab1.id1 FROM (SELECT id1, id2 FROM mytable GROUP BY id1, id2) tab1 WHERE id2!='') tab3
INNER JOIN
(SELECT tab2.id1 FROM (SELECT id1, id2 FROM mytable GROUP BY id1, id2) tab2 WHERE id2='') tab4
ON (tab3.id1 = tab4.id1)
编辑
显然可以一次完成此操作,从而防止污染您的数据库。查看@Dudu Markovitz 的回答
可能可以将其构建到 1 个语句中,从而消除临时表(或视图)的创建。
CREATE TABLE tempa AS SELECT DISTINCT id1 from mytable where id2 = '';
CREATE TABLE tempb AS SELECT DISTINCT id1 from mytable where id2 != '';
SELECT tempa.id1 FROM tempa INNER JOIN tempb on tempa.id1 = tempb.id1;
请注意 'not empty' 不是一个明确的定义,因此您可能需要调整第二行中的 where 语句以满足您的需要。
select id1
from mytable
group by id1
having count(case when id2 = '' then 1 end) > 0
and count(case when id2 <> '' then 1 end) > 0