当前位置: 首页 > 知识库问答 >
问题:

SQL减去2个子查询

司空锋
2023-03-14

我对SQL还很陌生,我想看看是否可以得到一些关于减法的帮助。我想减去studentstaken-studentsnotreviewed,然后将别名total分配给操作。我在想一些关于

select ((select count(*) from students where exams.id=students.exam_id) - (select count(*) from students where exams.id=students.exam_id and (students.review_flag='' or students.review_flag is null)) ) as 'Total'

但有些语法问题我不太确定。

select x.* from
(

select schools.name as School,  
exams.name as name, exams.exam_start as examstart, exams.exam_end as examend, 
(select count(*) from students where exams.id=students.exam_id) as studentstaken,
(select count(*) from students where exams.id=students.exam_id and (students.review_flag='' or students.review_flag is null)) as studentsnotreviewed,
#select () as 'Total'
case when exam_end< (now() - interval 2 day) then 'Yes' else 'No' end as 'Overdue',
exam_end + Interval 2 day as 'DueDate',
(select value from exam_options where exams.id=exam_options.exam_id and option_id=5) as IDtoggle,
(select value from exam_options where exams.id=exam_options.exam_id and option_id=6) as Roomscantoggle
from exams
left join taggables on exams.school_id=taggable_id
left join schools on exams.school_id=schools.id
where tag_id=12 and exam_start < now() and exam_start>'2021-01-01' and practice=0) as x
where studentsnotreviewed>0 and (studentsnotreviewed>15 or examend < now())  and (IDtoggle=1 or Roomscantoggle=1)
order by duedate asc, studentsnotreviewed desc

“样本数据”

[所需结果]

共有1个答案

吕新
2023-03-14

应该没问题。

select x.* 
from
(
    select schools.name as School,  
        exams.name as name, exams.exam_start as examstart, exams.exam_end as examend, 
        (select count(*) from students where exams.id=students.exam_id) as studentstaken,
        (select count(*) from students where exams.id=students.exam_id and (students.review_flag='' or students.review_flag is null)) as studentsnotreviewed,
        (select count(*) from students where exams.id=students.exam_id) 
        - (select count(*) from students where exams.id=students.exam_id and (students.review_flag='' or students.review_flag is null)) as 'Total',
   ... rest of the query
 类似资料:
  • 我有一个流入数据库,里面充满了值。这些值由Grafana提供。我需要的是根据选定的时间间隔获取实际值。 目前,我对单个指标有以下查询: 我想要的是从这个区间中减去最小的值,所以它只计算这个区间内的值。因此,图表需要从零开始。要从该间隔中获取最低值,我使用: 所以我认为像这样结合这两个(和子查询)应该可以: 不幸的是,这不起作用。该查询不被接受为子查询。

  • 问题内容: 我想在表中选择所有记录,这些记录的输入日期早于2个月。 知道我该怎么做吗? 我还没有尝试过任何东西,但是我在这一点上: 问题答案: 如果您使用的是SQL Server,请尝试以下操作: 根据您的更新,它将是:

  • 1. 前言 在上一小节中,我们一起学习了 SQL 子查询的语法,并介绍了 SQL 子查询是如何在 Insert、Select、Update 和 Delete 中使用的。 本小节,我们将继续学习子查询中的两个特殊关键字语法——ANY和ALL。 本小节测试数据如下,请先在数据库中执行: DROP TABLE IF EXISTS imooc_user; CREATE TABLE imooc_user (

  • 问题内容: 同时支持MySQL和SQL Server我需要从日期中减去几天。可以使用ANSI SQL完成此操作,还是需要维护两个版本? 例如。我有这个用于MySQL: 问题答案: ANSI SQL 2003规范没有公开可用的版本,但是没有厂商完全支持它。无论如何,这两者之间的语法有足够的差异,可以为每个编写不同的代码。 MySQL具有以下功能: SQL Server具有一个功能(不带下划线): 同

  • 问题内容: 我有个约会,假设今天是约会 我需要 从@d开始的是最近六个月的实际天数。 问题答案: 您可以使用: 编辑 :如果需要最多6个月前的天数,可以使用:

  • 问题内容: 我的网站的命中SQL表格名为ExternalHits。我将URL跟踪为URLx,将访问页面的日期跟踪为Datex。我每周运行一次此查询,以获取前一周的总点击数,并且每周我都必须手动更改“之间”的日期。有什么方法可以更改查询,以使“之间”的日期类似于TODAY AND TODAY-7?我只是不想不必每周手动更改日期。 问题答案: