重组内联视图
Restructure Inline view
SELECT MAX(column1)
FROM table1 B , table2 A, table3 H
WHERE B.unit=A.unit
AND B.value=A.value
AND B.unit=H.unit
AND B.value=H.value
AND A.number=1234
谁能帮我在内联视图中重组这个查询?
样本
Table1
------
Value Unit
001 A1
002 B1
003 C2
002 A1
Table2
--------
Value Unit Number
001 B4 11
002 B1 1234
004 B1 22
TABLE3
-------
VALUE UNIT NUMBER COLUMN1
001 B4 11 555
002 B1 1234 557
002 B1 1234 559
OUTPUT
------
MAX(C0LUMN1)
-----------
559
I need to show column from other table that have the max column value
SELECT MAX( H.column1 ) AS max_column1,
MAX( A.number ) KEEP ( DENSE_RANK LAST ORDER BY H.column1 ) AS max_number
FROM table1 B
INNER JOIN table2 A
ON ( B.unit = A.unit AND B.value = A.value )
INNER JOIN table3 H
ON ( B.unit = H.unit AND B.value = H.value )
WHERE A.number=1234
在您的查询中不需要 inlineview :-
如果在 inlineview 中重写它会像
Select Max(Column1)
From (Select Value,Unit From Table1)B,
(Select Value,Unit,Number From Table2)A,
Table3 as H
Where B.Unit=A.Unit
And B.Value=A.Value
AND B.unit=H.unit
And B.Value=H.Value
AND A.number=1234;
以下是使用内联视图的示例希望对您有所帮助!!!
内联视图是 FROM 子句中的 SELECT 语句。如视图部分所述,视图是虚拟的 table,具有 table 的特征,但不包含任何实际数据。在内联视图构造中,数据源实际上来自在 SQL 语句中创建的视图,而不是在 FROM 关键字后指定 table 名称。内联视图的语法是,
SELECT "column_name" FROM (Inline View);
我们什么时候应该使用内联视图?下面是一个例子:
假设我们有两个 table:第一个 table 是 User_Address,它将每个用户映射到一个邮政编码;第二个table是User_Score,它记录了每个用户的所有分数。问题是,如何编写一个 SQL 查询来查找每个邮政编码得分高于 200 的用户数量?
不使用内联视图,我们可以分两步完成:
查询 1
CREATE TABLE User_Higher_Than_200
SELECT User_ID, SUM(Score) FROM User_Score
GROUP BY User_ID
HAVING SUM(Score) > 200;
查询 2
SELECT a2.ZIP_CODE, COUNT(a1.User_ID)
FROM User_Higher_Than_200 a1, User_Address a2
WHERE a1.User_ID = a2.ZIP_CODE
GROUP BY a2.ZIP_CODE;
在上面的代码中,我们引入了一个临时的table,User_Higher_Than_200来存储得分高于200的用户列表。User_Higher_Than_200然后用于加入User_Address table 得到最终结果。
We can simplify the above SQL using the inline view construct as follows:
查询 3
SELECT a2.ZIP_CODE, COUNT(a1.User_ID)
FROM
(SELECT User_ID, SUM(Score) FROM
User_Score GROUP BY User_ID HAVING SUM(Score) > 200) a1,
User_Address a2
WHERE a1.User_ID = a2.ZIP_CODE
GROUP BY a2.ZIP_CODE;
这里使用内联视图有两个优点:
我们不需要创建临时 table。这可以防止数据库拥有太多对象,这是一件好事,因为数据库中每个额外的对象都会花费资源来管理。
我们可以使用单个 SQL 查询来完成我们想要的
请注意,我们对待内联视图与对待 table 完全相同。比较查询 2 和查询 3,我们看到唯一的区别是我们将查询 2 中的临时 table 名称替换为查询 3 中的内联视图语句。其他一切保持不变。
内联视图有时称为派生视图 table。这两个术语可以互换使用。
SELECT MAX(column1)
FROM table1 B , table2 A, table3 H
WHERE B.unit=A.unit
AND B.value=A.value
AND B.unit=H.unit
AND B.value=H.value
AND A.number=1234
谁能帮我在内联视图中重组这个查询?
样本
Table1
------
Value Unit
001 A1
002 B1
003 C2
002 A1
Table2
--------
Value Unit Number
001 B4 11
002 B1 1234
004 B1 22
TABLE3
-------
VALUE UNIT NUMBER COLUMN1
001 B4 11 555
002 B1 1234 557
002 B1 1234 559
OUTPUT
------
MAX(C0LUMN1)
-----------
559
I need to show column from other table that have the max column value
SELECT MAX( H.column1 ) AS max_column1,
MAX( A.number ) KEEP ( DENSE_RANK LAST ORDER BY H.column1 ) AS max_number
FROM table1 B
INNER JOIN table2 A
ON ( B.unit = A.unit AND B.value = A.value )
INNER JOIN table3 H
ON ( B.unit = H.unit AND B.value = H.value )
WHERE A.number=1234
在您的查询中不需要 inlineview :- 如果在 inlineview 中重写它会像
Select Max(Column1)
From (Select Value,Unit From Table1)B,
(Select Value,Unit,Number From Table2)A,
Table3 as H
Where B.Unit=A.Unit
And B.Value=A.Value
AND B.unit=H.unit
And B.Value=H.Value
AND A.number=1234;
以下是使用内联视图的示例希望对您有所帮助!!!
内联视图是 FROM 子句中的 SELECT 语句。如视图部分所述,视图是虚拟的 table,具有 table 的特征,但不包含任何实际数据。在内联视图构造中,数据源实际上来自在 SQL 语句中创建的视图,而不是在 FROM 关键字后指定 table 名称。内联视图的语法是,
SELECT "column_name" FROM (Inline View);
我们什么时候应该使用内联视图?下面是一个例子:
假设我们有两个 table:第一个 table 是 User_Address,它将每个用户映射到一个邮政编码;第二个table是User_Score,它记录了每个用户的所有分数。问题是,如何编写一个 SQL 查询来查找每个邮政编码得分高于 200 的用户数量?
不使用内联视图,我们可以分两步完成:
查询 1
CREATE TABLE User_Higher_Than_200
SELECT User_ID, SUM(Score) FROM User_Score
GROUP BY User_ID
HAVING SUM(Score) > 200;
查询 2
SELECT a2.ZIP_CODE, COUNT(a1.User_ID)
FROM User_Higher_Than_200 a1, User_Address a2
WHERE a1.User_ID = a2.ZIP_CODE
GROUP BY a2.ZIP_CODE;
在上面的代码中,我们引入了一个临时的table,User_Higher_Than_200来存储得分高于200的用户列表。User_Higher_Than_200然后用于加入User_Address table 得到最终结果。
We can simplify the above SQL using the inline view construct as follows:
查询 3
SELECT a2.ZIP_CODE, COUNT(a1.User_ID)
FROM
(SELECT User_ID, SUM(Score) FROM
User_Score GROUP BY User_ID HAVING SUM(Score) > 200) a1,
User_Address a2
WHERE a1.User_ID = a2.ZIP_CODE
GROUP BY a2.ZIP_CODE;
这里使用内联视图有两个优点:
我们不需要创建临时 table。这可以防止数据库拥有太多对象,这是一件好事,因为数据库中每个额外的对象都会花费资源来管理。
我们可以使用单个 SQL 查询来完成我们想要的 请注意,我们对待内联视图与对待 table 完全相同。比较查询 2 和查询 3,我们看到唯一的区别是我们将查询 2 中的临时 table 名称替换为查询 3 中的内联视图语句。其他一切保持不变。
内联视图有时称为派生视图 table。这两个术语可以互换使用。