如何在子查询中使用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;

但是我还不太清楚如何使它在更长的SELECT语句中起作用我遇到的问题是查询中还有许多其他(更简单)的部分,它们也可以在SELECT语句中按团队返回

COUNT(DISTINCT CASE WHEN v.WillCanvass = "X" THEN v.id END)

因此,显然我无法获得HAVING (count > 1)活动主义者的查询部分,因为这将影响我的SELECT陈述的所有其他部分-因此,我需要上面的子查询仅影响我正在研究的唯一部分。

使用示例架构制作了一个SQL Fiddle,以帮助上述查询正常工作-但理想的情况是获得类似于此的输出,其中Activists子查询不会影响该WillCanvass列(即使我将数字组成)下面):

Team    Activists   WillCanvass
Team A  2           2
Team B  8           5
Team C  7           3

希望有道理-谢谢!


编辑

我最想要的内容-尽管查询给了我错误-看起来像这样:

SELECT a.team as team,
    COUNT(v.*) as activists,
    SUM(CASE WHEN v.WillCanvass = "X" THEN 1 ELSE 0 END) as WillCanvass
FROM
persontable v
left join
(
    SELECT e.id, 
        v.team,
        v.WillCanvass,
        COUNT(*) as count
    FROM actiontable e
    LEFT JOIN persontable v ON v.id = e.id
    WHERE e.status="Completed" AND right(e.date,2)="15"
    GROUP BY e.id
    HAVING (count > 1)) as a 
        GROUP BY team;

有它的更新的SQL小提琴这里

瑞安

我明白了-感谢您帮助我到达那里,但这与上面的内容完全不同。HAVING为了使SELECT语句(WillCanvass的第一actiontable部分与它一部分完全独立,我必须完全删除子句

SELECT a.team as team,
    COUNT(case when a.X > 1 then a.id else null end) as activists,
    SUM(CASE WHEN a.WillCanvass = "X" THEN 1 ELSE 0 END) as WillCanvass
FROM (
    SELECT v.id, 
        v.team,
        v.WillCanvass,
        COUNT(case when e.status="Completed" AND right(e.date,2)="15" then e.id else null end) as X
    FROM actiontable e
    RIGHT JOIN persontable v ON v.id = e.id
    GROUP BY v.id, v.team, v.WillCanvass
 ) as a 
GROUP BY team;

这是一个新的SQL Fiddle,以了解其工作原理。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Jgit中将文件列表作为提交的一部分

如何在Logrotate上使用日期和时间作为文件名的一部分?

如何在Paw中将文件作为多部分请求的一部分上载?

在WHILE循环中使用变量作为列名的一部分

如何提取子字符串作为dplyr :: mutate管道的一部分

如何在PowerShell中将参数作为-file的一部分传递

使用GetDate()作为SELECT DISTINCT的一部分不好吗?

使用变量作为语句的一部分

如何在VBScript中使用正则表达式替换子字符串的一部分?

如何在MarkLogic中将子元素包含为单词查询的一部分

Mediawiki:如何在画廊中使用{{PAGENAME}}作为文件名的一部分?

如何在Flask中返回图像作为GET请求响应的一部分?

作为哈希子分区的一部分,如何为键指定多个列?

如何编写可以返回0行作为case语句一部分的T-SQL查询

如何在SwiftUI中将View()作为列表的一部分传递?

在公式的一部分中使用变量

如何在PHP中将“&”作为字符串的一部分传递?

在SQL语句的一部分中使用if计数

如何返回记录数作为select语句的一部分?

如何复制配置文件作为打包的一部分以在部署中使用?

选择选项数组作为select语句的一部分

MySQL-如何使用文件名作为查询的一部分?

作为Shell脚本的一部分,如何在后台运行隧道

如何在Java中使用字符串的一部分?

如何在 Concourse CI 中使用 yaml 模板变量作为值的一部分

如何在 mysql 中执行 IF 语句作为 SELECT 语句的一部分

如何在 Matlab 中使用其他结构的一部分创建结构?

如何在 bash shell 中使用查找结果作为正则表达式的一部分

如何在此查询的这一部分使用标签?