gpt4 book ai didi

mysql - 如何在此带有 CASE 语句的多 JOIN 语句中使用 GROUP BY 语法?

转载 作者:行者123 更新时间:2023-12-01 00:28:00 27 4
gpt4 key购买 nike

我有以下查询

SELECT s.s_id, s.t_id, c.c_id, c.desc, sm.user_id
FROM s s
INNER JOIN c c
ON s.c_id=c.c_id
INNER JOIN sm sm
ON s.t_id = sm.t_id
WHERE s.c_id=8;

返回如下结果集

s.s_id  s.t_id  c.c_id  c.desc     sm.user_id
3 123 8 something 2
3 123 8 something 2
3 123 8 something 1
4 456 8 something 2
4 456 8 something 2

我愿意

  1. 在结果集中创建一个额外的列来指示是否用户拥有产品(这涉及使用 CASE 语法)
  2. 并且只显示那些 唯一的 s.s_id(这涉及使用 GROUP BY s.s_id)

例如,如果 s.c_id=8sm.user_id=1,结果集将是

s.s_id  s.t_id  c.c_id  c.desc      sm.user_id does_user_own_product
3 123 8 something 1 yes
4 456 8 something 2 no

s.s_id=3 时,does_user_own_product 的值为 yes 因为至少有一个 sm.user_id=1其中 s.s_id=3。当 s.s_id=4 时,does_user_own_product 的值为 no 因为没有 sm.user_id=1 WHERE s.s_id= 4

例如,如果 s.c_id=8sm.user_id=2,结果集将是

s.s_id  s.t_id  c.c_id  c.desc      sm.user_id does_user_own_product
3 123 8 something 1 yes
4 456 8 something 2 yes

s.s_id=3 时,does_user_own_product 的值为 yes 因为至少有一个 sm.user_id=2其中 s.s_id=3。当 s.s_id=4 时,does_user_own_product 的值为 yes 因为至少有一个 sm.user_id=2 WHERE s。 s_id=4.

假设我提供了 s.c_idsm.user_id 的值,实现上述两个子集的适当查询是什么

编辑我意识到对于用户拥有产品意味着什么存在一些困惑。

如果可以在 sm.user_id 中找到用户的 id,则该用户拥有该 s.s_id

所以比如在原始结果集中

s.s_id  s.t_id  c.c_id  c.desc     sm.user_id
3 123 8 something 2
3 123 8 something 2
3 123 8 something 1
4 456 8 something 2
4 456 8 something 2

用户 1 和 2 拥有 s.s_id 3,只有用户 2 拥有 s.s_id 4

最佳答案

这样做:http://www.sqlfiddle.com/#!2/e4c84/21

利用 MySql 的优势:

set @userInquired := 1;

select s_id, t_id, c_id, dsc,
bit_or(user_id = @userInquired) as does_user_own_product
from tbl
group by s_id;

set @userInquired := 2;

select s_id, t_id, c_id, dsc,
bit_or(user_id = @userInquired) as does_user_own_product
from tbl
group by s_id;

共同点 SQL:

set @userInquired := 1;

select s_id, t_id, c_id, dsc,

case when sum(case when user_id = @userInquired then 1 end) > 0 then
1
else
0
end as does_user_own_product

from tbl
group by s_id;


set @userInquired := 2;

select s_id, t_id, c_id, dsc,

case when sum(case when user_id = @userInquired then 1 end) > 0 then
1
else
0
end as does_user_own_product

from tbl
group by s_id;

公分母 SQL。如果您的数据库没有正确的 bool 值,则使用最短的技术,使用 case whenmax 的组合:

set @userInquired := 1;

select s_id, t_id, c_id, dsc,

max(case when user_id = @userInquired then 1 else 0 end)
as does_user_own_product

from tbl
group by s_id;



set @userInquired := 2;

select s_id, t_id, c_id, dsc,

max(case when user_id = @userInquired then 1 else 0 end)
as does_user_own_product

from tbl
group by s_id;

关于mysql - 如何在此带有 CASE 语句的多 JOIN 语句中使用 GROUP BY 语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10526003/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com