我需要一些帮助来编写查询,我真的不知道从哪里开始。我的数据看起来像这样(本文简化):
mid dbaname profit payment takeback bonus custid uid
8788260180066 Baby's Room The 37.5 -10 27.5 13.75 1025 A6E5B9243B1445978F49961574912E8D
8788014125552 Window Brite 0 0 0 0 1025 A6E5B9243B1445978F49961574912E8D
8788014125552 Window Brite 0 0 0 0 1025 B89D1424AB2649E38386EDC287D5C862
8788014123644 Mr. Wash It 10 -10 0 0 1025 A6E5B9243B1445978F49961574912E8D
8788014123644 Mr. Wash It 10 -10 0 0 1025 B89D1424AB2649E38386EDC287D5C862
第8列中有userid
,如下所示:B89D1424AB2649E38386EDC287D5C862
。您可以从这些数据中注意到,每个帐户/记录都是重复的,第8列中的管理员userid
(管理员的用户ID为A6E5B9243B1445978F49961574912E8D
)。第一个记录只有一次出现,因为该帐户实际上属于管理员,而其他帐户实际上属于另一个用户ID(它们只显示在管理员的视图中)。
好的,这就是我需要的:
所以,结果应该是这样的:
mid dbaname profit payment takeback bonus custid uid
8788260180066 Baby's Room The 37.5 -10 27.5 13.75 1025 A6E5B9243B1445978F49961574912E8D
8788014125552 Window Brite 0 0 0 0 1025 B89D1424AB2649E38386EDC287D5C862
8788014123644 Mr. Wash It 10 -10 0 0 1025 B89D1424AB2649E38386EDC287D5C862
请记住,我已经简化了我的问题和数据集以使其更容易理解,完整的数据集实际上需要第3列的SUM()
函数和GROUP BY
指令。
答案 0 :(得分:2)
Col1引用您的第一个列名称,col3引用您的第三列名称等
此查询的第一部分为非管理员帐户抓取了col8 admin和非admin的帐户。
此查询的第二部分为管理员帐户抓取了col8 just admin。
select col1, sum(col3)
from tbl x
where exists (select 1
from tbl y
where y.col1 = x.col1
and y.col8 = 'B89D1424AB2649E38386EDC287D5C862')
and exists (select 1
from tbl y
where y.col1 = x.col1
and y.col8 <> 'B89D1424AB2649E38386EDC287D5C862')
and y.col8 <> 'B89D1424AB2649E38386EDC287D5C862'
group by col1
union all
select col1, sum(col3)
from tbl x
where not exists (select 1
from tbl y
where y.col1 = x.col1
and y.col8 <> 'B89D1424AB2649E38386EDC287D5C862')
and col8 = 'B89D1424AB2649E38386EDC287D5C862'
group by col1
答案 1 :(得分:0)
选择admin和UNION拥有的所有非管理员
SELECT *
FROM foo
GROUP BY uid
HAVING COUNT(*)=1;
UNION
SELECT *
FROM foo
WHERE uid <> 'A6E5B9243B1445978F49961574912E8D';