有个问题请问各位大神,
背景:数据库中有表TEST1,有两个字段NAME和PRICE
数据库中有表TEST2,有两个字段NAME和ID
需求:创建视图,包含4列,按TEST2中的ID字段分组,合计PRICE字段,计数PRICE字段,用每组的合计数除以每组的数量
做出来的样子如下:
名称 合计价格 数量 单价(合计/数量)
电脑 600 3 200
笔记本 300 3 100
问题:请问该如何写SQL语句?
CREATE VIEW V_SUM AS
SELECT MAX(t2.NAME) 名称,
SUM(t1.PRICE) 合计价格,
COUNT(t1.PRICE) 数量,
SUM(t1.PRICE)/COUNT(t1.PRICE) 单价
FROM TEST1 t1
JOIN TEST2 t2
ON t1.NAME = t2.NAME
GROUP BY t2.ID
= =前辈问下。。我写view遇到了类似的问题
代码如下
CREATE VIEW
ASSETPOOL_AREA
(
AREA,
LOANVALUE,
LOANVALUEPER,
INPOOLVALUE,
INPOOLVALUEPER,
LOANCOUNT,
LOANCOUNTPER,
AVGINPOOLVALUE
) AS
(
SELECT
L.LOCATION AREA,
SUM(to_number(REPLACE(LOANVALUE,',',''))) LOANVALUE,
ROUND(SUM(to_number(REPLACE(LOANVALUE,',','')))/
(
SELECT
SUM(to_number(REPLACE(LOANVALUE,',','')))
FROM
CONTRACT),2) LOANVALUEPER,
SUM(to_number(REPLACE(LOANVALUE,',',''))) INPOOLVALUE,
ROUND(SUM(to_number(REPLACE(LOANVALUE,',','')))/
(
SELECT
SUM(to_number(REPLACE(LOANVALUE,',','')))
FROM
CONTRACT),2) INPOOLVALUEPER,
COUNT(to_number(REPLACE(C.SERIALNO,',',''))) LOANCOUNT,
ROUND(COUNT(to_number(REPLACE(C.SERIALNO,',','')))/
(
SELECT
COUNT(to_number(REPLACE(C.SERIALNO,',','')))
FROM
CONTRACT),2) LOANCOUNTPER,
ROUND(AVG(to_number(REPLACE(LOANVALUE,',',''))),2) AVGINPOOLVALUE
FROM
LENDER L
CONTRACT C
GROUP BY
L.LOCATION
)
其中最后的结果是需要同时运用LOCATION 和SERIALNO得出。。但是- -写不出。。如果两个都写为group by条件。。。就成了一条记录一行,原本效果为一个地区(例如:上海)一行
这样的话合计价格和数量列会有问题
模拟的数据是
名称 价格
电脑 400
电脑 100
电脑 100
笔记本 100
笔记本 100
笔记本 100
出来的视图是
ID 合计 数量 单价
001 900 9 100
002 1800 9 200
应该是根据name分组吧。亲
应该采纳Tiger_zhao的建议。写得多好。这样的话合计价格这列怎么会有问题 ?
想想,应该给 Tiger_zhao 1个C。
只要,select * from view group by name
我就是一菜鸟,说吧。