小编Rya*_*yan的帖子

如何在子查询中使用 HAVING 作为 Select 语句的一部分

我正在查询今年有多少活动人士多次参加团队志愿服务;我让它作为一个独立的查询工作:

   SELECT Activists.team, COUNT(id) AS Activists
    FROM
    (
        SELECT e.id, v.team, 
        COUNT(CASE WHEN (e.status="Completed" AND right(e.date,2)="15") THEN e.id END) AS count
        FROM actiontable e
        LEFT JOIN persontable v ON v.id = e.id
        GROUP BY e.id, v.team
        HAVING (count > 1)
    ) AS Activists
    GROUP BY Activists.team;
Run Code Online (Sandbox Code Playgroud)

但我不太清楚如何让它在更长的SELECT声明中发挥作用。我遇到的问题是,我还有许多其他(更简单)的查询部分,可以在语句中按团队返回内容,例如SELECT

COUNT(DISTINCT CASE WHEN v.WillCanvass = "X" THEN v.id END)
Run Code Online (Sandbox Code Playgroud)

显然,我不能获得HAVING (count > 1)活动人士的查询部分,因为那样它会影响我SELECT声明的所有其他部分——所以我需要上面的子查询只影响我正在处理的唯一部分。

我用示例模式制作了一个SQL Fiddle来帮助完成上述有效的查询 - 但理想的情况是获得与此类似的输出,其中子查询Activists不会影响WillCanvass列(即使我编造了数字)以下):

Team    Activists …
Run Code Online (Sandbox Code Playgroud)

mysql subquery having

5
推荐指数
1
解决办法
7589
查看次数

仅显示JOIN不起作用的记录的子查询

我在MySQL中创建了一个相对简单的查询,JOIN根据名字和姓氏匹配的位置给出了三个表.从那里开始,我想编写另一个查询,然后只显示那些没有得到匹配的记录JOIN- 但我无法弄清楚如何做到这一点.我假设它与使用涉及类似NOT IN和我的原始查询的子查询有关,但我无法得到它给我想要的结果.

这是我尝试提出的部分功能正常的解决方法:

SELECT *, 
  if(t2.first=t1.first AND t2.last=t1.last, "Match", "No Match") AS "t2 Match",
  if(t3.first=t1.first AND t3.last=t1.last, "Match", "No Match") AS "t3 Match"
FROM t1
LEFT JOIN t2 ON t2.first=t1.first AND t2.last=t1.last
LEFT JOIN t3 ON t3.first=t1.first AND t3.last=t1.last
WHERE if(t2.first=t1.first AND t2.last=t1.last, "Match", "No Match")="No Match"
   OR if(t3.first=t1.first AND t3.last=t1.last, "Match", "No Match")="No Match";
Run Code Online (Sandbox Code Playgroud)

我觉得这是相当简单和直接的事情,但我没有得到正确的结果.有人可以帮忙吗?

谢谢!

mysql join subquery

0
推荐指数
1
解决办法
65
查看次数

标签 统计

mysql ×2

subquery ×2

having ×1

join ×1