Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在视图中使用where子句 这是我正在处理的一个问题的简化查询 但是,我希望能够在视图中添加一个WHERE子句。类似这样的东西WHERE promotion.created\u at>?_Sql_Postgresql_Stored Procedures_View_Parameter Passing - Fatal编程技术网

Sql 在视图中使用where子句 这是我正在处理的一个问题的简化查询 但是,我希望能够在视图中添加一个WHERE子句。类似这样的东西WHERE promotion.created\u at>?

Sql 在视图中使用where子句 这是我正在处理的一个问题的简化查询 但是,我希望能够在视图中添加一个WHERE子句。类似这样的东西WHERE promotion.created\u at>?,sql,postgresql,stored-procedures,view,parameter-passing,Sql,Postgresql,Stored Procedures,View,Parameter Passing,问题: 我应该如何修改视图,以便执行以下操作: CREATE VIEW summary AS SELECT sales.inventory_id, sum(sales.value) AS value, count(sales.*) AS sales_n, FROM promotion JOIN sales USING (promotion_id) GROUP BY sales.inventory_id ; 我目前无法执行此操作,因为库存id上有一个GROUP B

问题:

我应该如何修改视图,以便执行以下操作:

CREATE VIEW summary AS  
SELECT sales.inventory_id,
       sum(sales.value) AS value,
       count(sales.*) AS sales_n,
FROM promotion
JOIN sales USING (promotion_id)
GROUP BY sales.inventory_id
;

我目前无法执行此操作,因为
库存id
上有一个
GROUP BY
,因此
促销。在
创建的\u不会被捕获使用SQL函数,改为将时间戳作为参数:

SELECT * 
FROM summary 
WHERE promotion.created_at > [timestamp]
电话:

我用表别名缩短了语法。
count(*)
的作用与此处的
count.*
相同。
根据实际数据类型调整
返回表(…)

CREATE FUNCTION summary(_created_at timestamp)
  RETURNS TABLE (inventory_id int, value bigint, sales_n int)
AS
$func$
SELECT s.inventory_id
     , sum(s.value) -- AS value  -- alias not visible outside function
     , count(*)     -- AS sales_n
FROM   promotion p
JOIN   sales     s USING (promotion_id)
WHERE  p.created_at > $1
GROUP  BY s.inventory_id
$func$ LANGUAGE sql STABLE;
SELECT * FROM summary('2014-06-01 10:00');