首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL SELECT字符串大于使用count()

SQL SELECT字符串大于使用count()
EN

Stack Overflow用户
提问于 2013-04-25 12:39:24
回答 4查看 288关注 0票数 3

我正在尝试列出研究生成员比本科生成员多的组。我觉得我有我的想法背后的概念,但进行查询比简单的翻译稍微困难一点。下面是我的代码,我当前收到一个缺少右括号错误,其中计数(student.career= 'GRD')。谢谢。

代码语言:javascript
复制
SELECT studentgroup.name 
COUNT(student.career = 'GRD') - COUNT(student.career = 'UGRD') 
AS Gradnum FROM studentgroup 
INNER JOIN memberof ON studentgroup.GID = memberof.GroupID
INNER JOIN student ON memberof.StudentID = student.SID
WHERE Gradnum > 1;
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-04-25 14:24:00

代码语言:javascript
复制
SELECT studentgroup.GID, max(studentgroup.name)
FROM studentgroup 
INNER JOIN memberof ON studentgroup.GID = memberof.GroupID
INNER JOIN student ON memberof.StudentID = student.SID
GROUP BY studentgroup.GID
HAVING SUM(CASE WHEN student.career = 'GRD' THEN 1 
                WHEN student.career = 'UGRD'THEN -1
                ELSE 0
            END) >0
票数 1
EN

Stack Overflow用户

发布于 2013-04-25 12:41:09

代码语言:javascript
复制
SELECT studentgroup.name 
SUM(CASE WHEN student.career = 'GRD' THEN 1 ELSE 0 END) - SUM(CASE WHEN student.career = 'UGRD' THEN 1 ELSE 0 END) 
AS Gradnum FROM studentgroup 
INNER JOIN memberof ON studentgroup.GID = memberof.GroupID
INNER JOIN student ON memberof.StudentID = student.SID
WHERE Gradnum > 1
GROUP BY studentgroup.name;
票数 1
EN

Stack Overflow用户

发布于 2013-04-25 14:00:32

我已经使用了As子句,除了MySQL之外,大多数数据库管理系统(如SQL Server、PostGresSQL )都支持它

代码语言:javascript
复制
With grpTbl As
(

SELECT studentgroup.name As StudentGroupName,
       SUM( CASE WHEN student.career = 'GRD' THEN 1 ELSE 0 END ) AS 'TotalGraduate',
       SUM( CASE WHEN student.career = 'UGRD' THEN 1 ELSE 0 END ) AS 'TotalUnderGraduate'

FROM studentgroup 
INNER JOIN memberof ON studentgroup.GID = memberof.GroupID
INNER JOIN student ON memberof.StudentID = student.SID

)


SELECT StudentGroupName
FROM grpTbl 
WHERE TotalGraduate > TotalUnderGraduate

对于MySQL,您可以使用临时表来存储第一次查询的结果集,并在WHERE子句中过滤出比UnderGraduate更有Graduate的GroupNames。该方法也适用于其它数据库管理系统,不同之处在于创建临时表的语法不同。

代码语言:javascript
复制
CREATE TEMPORARY TABLE grpTbl (
StudentGroupName varchar(255),
TotalGraduate INT,
TotalUnderGraduate INT
);


INSERT INTO grpTbl
SELECT studentgroup.name As StudentGroupName,
           SUM( CASE WHEN student.career = 'GRD' THEN 1 ELSE 0 END ) ,
           SUM( CASE WHEN student.career = 'UGRD' THEN 1 ELSE 0 END ) 

    FROM studentgroup 
    INNER JOIN memberof ON studentgroup.GID = memberof.GroupID
    INNER JOIN student ON memberof.StudentID = student.SID 


 SELECT StudentGroupName
    FROM grpTbl 
    WHERE TotalGraduate > TotalUnderGraduate


 DROP TABLE grpTbl 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16206498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档