是否可能具有以下SQL形式:
SELECT
(
(SUBQUERY1) -
(SUBQUERY2)
)
假定这两个子查询正确。由于第一个查询中没有FROM,因此对我来说似乎是有线的。
谢谢!
仅是大学课程中的一个简单示例:
给予关系:
id
是关键的学生(id,gpa)找出参加Class1的学生和参加Class2的学生的平均GPA之间的差异。假设有些学生参加了两次以上的考试。
以下SQL查询可以吗?
SELECT
(SELECT AVG(gpa)
FROM Students
WHERE id IN (SELECT id
FROM Enrolls
WHERE number = "CLASS1")
)
-
(SELECT AVG(gpa)
FROM Students
WHERE id IN (SELECT id
FROM Enrolls
WHERE number = "CLASS2")
)
答案 0 :(得分:3)
这取决于您使用的DBMS。在SQL Server上,这是有效的。在Oracle上,SELECT
需要有一个FROM
,但是如果您的dual
可以在不使用SELECT
的情况下使用,则可以使用FROM
这是系统提供的只读的单行一列表。一个FROM
子句(如您的示例),只需要使用mydf = pd.DataFrame({'date_ym':['2018-01', '2018-01','2018-01','2018-01','2018-02','2018-02','2018-03'],'category':['A','A','A','B','A','B','B'], 'values':[np.nan,4.0,5.1,np.nan,6.2,np.nan,np.nan]})
mydf
Out[134]:
category date_ym values
0 A 2018-01 NaN
1 A 2018-01 4.0
2 A 2018-01 5.1
3 B 2018-01 NaN
4 A 2018-02 6.2
5 B 2018-02 NaN
6 B 2018-03 NaN
子句即可使SQL解析器满意。
答案 1 :(得分:2)
是的,可能有此构造。考虑这个示例(MySQL
)
mysql> select ((select length('abcde')) - (select length('xyz')));
+-----------------------------------------------------+
| ((select length('abcde')) - (select length('xyz'))) |
+-----------------------------------------------------+
| 2 |
+-----------------------------------------------------+
答案 2 :(得分:1)
是的,只要子查询每个返回一个值。
比较:
Select (select 1), (select 2)
或
Select (1), (2)
,两者均有效, 到:
Select (select 1, 3), (select 2, 5)
在SQL Server中返回以下错误:
消息116,级别16,状态1,行1 未在子查询中引入子查询时在选择列表中指定 存在。