标签: aggregate

为行组添加总量列

我有一个 Items 表和一个 Inventory 表。一个项目可以属于多个库存记录。我正在尝试返回所有库存记录的列表,但在新列中包含它们的数量。例如:

项目

ItemID     ItemDescription
103        Headphones
115        Speakers
230        Wireless Adapter
275        20' Network Cable
Run Code Online (Sandbox Code Playgroud)

存货

InventoryID        ItemID        WarrantyDate       Status
1                  103           12/22/2010         Available
2                  103           05/15/2012         Available
3                  103           02/24/2015
4                  275           01/01/2010
5                  275           01/01/2011
Run Code Online (Sandbox Code Playgroud)

如果我尝试COUNT使用 ItemID 和GROUP BYItemID,如下所示:

SELECT ItemID, COUNT(ItemID) AS Quantity
FROM Inventory
GROUP BY ItemID
Run Code Online (Sandbox Code Playgroud)

我得到:

ItemID  Quantity
103     3
275     2        
Run Code Online (Sandbox Code Playgroud)

但我真正想要的是:

InventoryID        ItemID        WarrantyDate       Status       Quantity
1                  103           12/22/2010         Available    3
2                  103           05/15/2012 …
Run Code Online (Sandbox Code Playgroud)

sql-server aggregate sql-server-2012 window-functions

3
推荐指数
1
解决办法
843
查看次数

每名员工每天的总工作时间(包括通宵工作时间)

我有一个这样的表:

CREATE TABLE Table1
(ID int, empid int, time datetime, state int);

+--------------+---------------------+-----------------+
|    empid     |       time          |      state      | 
+--------------+---------------------+-----------------+
(      4       | 2014-03-01 11:12:00 |         0       )  
(      5       | 2014-03-01 12:28:06 |         0       )
(      4       | 2014-03-01 12:50:07 |         1       )
(      4       | 2014-03-01 13:38:00 |         0       )
(      5       | 2014-03-01 13:28:06 |         1       )
(      4       | 2014-03-01 18:42:15 |         1       )
(      4       | 2014-03-02 08:11:08 |         0       ) 
(      4       | …
Run Code Online (Sandbox Code Playgroud)

mysql aggregate sum running-totals

3
推荐指数
1
解决办法
7893
查看次数

varchar 列的最大值

我有一个表,其中一个名为price的列键入为varchar. 我想要这个列的最大值。我正在使用这个查询:

SELECT MAX(price) FROM product_management.`item_list` 
Run Code Online (Sandbox Code Playgroud)

但结果是错误的。请解决这个问题。

我正在使用 [SB] SQLyog Ultimate Ver。9.0.2.0。

mysql aggregate

3
推荐指数
1
解决办法
8642
查看次数

查找哈希匹配聚合

阅读以下博客后,我明白hash match聚合原因blocking。使用适当的索引,它可以作为stream aggregate.

  1. 阻塞/非阻塞聚合运算符
  2. 聚合的阻塞性质 - Rob Farley
  3. 哈希聚合-Craig Freedman

我有一个数据库,其中包含 200 多个多年前创建的表。我正在尝试通过 group by 查找当前正在使用hash match聚合运算符的所有查询。我发现的一种可能性是使用 dmv,如下所示。但我不知道如何过滤它以仅列出带有hash match聚合运算符的查询。如何实现这一目标?此外,从大局来看,除了遵循 dmv 之外,还有哪些其他选项可以获取此信息?

SELECT cp.objtype AS ObjectType,
    OBJECT_NAME(st.objectid,st.dbid) AS ObjectName,
    cp.usecounts AS ExecutionCount,
    st.TEXT AS QueryText,
    qp.query_plan AS QueryPlan
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) AS qp
CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) AS st
WHERE st.TEXT LIKE '%GROUP%'
Run Code Online (Sandbox Code Playgroud)

performance sql-server aggregate execution-plan performance-tuning

3
推荐指数
1
解决办法
532
查看次数

PostgreSQL ntile() 分区

我有一个带有人口值的点网格。每个点都有一个 id 和人口值。我也有一个 state_id,它说明了要点是什么状态。

现在我想计算每个州的百分位数 ntile(100)。

   SELECT  id, population, state_id, 
   ntile(100) OVER(ORDER BY car20) as percentile
   FROM avi_threshold01 
Run Code Online (Sandbox Code Playgroud)

当我使用它时,我认为它会计算所有点和状态的 ntile。

postgresql aggregate window-functions group-by

3
推荐指数
1
解决办法
7461
查看次数

使用sql将多行合并为一行

在源表中,每一行代表特定活动一天的小时数。如何使用 sql 将天的行合并到员工、年、期间和活动上不同的期间行?

从源表中选择:

SELECT [Employee]
      ,[Year]
      ,[Period]
      ,[Activity]
      ,[Day1]
      ,[Day2]
      ,[Day3]
      ,[Day4]
      ,[Day5]
      ,[Day6]
      ,[Day7]
FROM [HoursAccounting]
where Employee = '1234'
Run Code Online (Sandbox Code Playgroud)

结果:

Employee Year        Period      Activity   Day1    Day2    Day3    Day4    Day5    Day6    Day7
-------- ----------- ----------- ---------- ------- ------- ------- ------- ------- ------- -------
1234     2016        34          102002     7,5     0       0       0       0       0       0
1234     2016        34          102002     0       7,6     0       0       0       0       0
1234     2016        36          102002     0       7,5     0       0       0       0       0
1234     2016 …
Run Code Online (Sandbox Code Playgroud)

sql-server aggregate

3
推荐指数
1
解决办法
3万
查看次数

在 PostgreSQL 中为滚动总和设置非负下限

这是一个非常有趣的问题(针对 SQL Server 提出的问题),我想尝试一下,看看它是如何在 PostgreSQL 中完成的。让我们看看其他人是否可以做得更好。拿着这个数据,

CREATE TABLE foo
AS
  SELECT pkid::int, numvalue::int, groupid::int
  FROM ( VALUES
    ( 1,  -1   , 1 ),
    ( 2,  -2   , 1 ),
    ( 3,  5    , 1 ),
    ( 4,  -7   , 1 ),
    ( 5,  1    , 2 )
  ) AS t(pkid, numvalue, groupid);
Run Code Online (Sandbox Code Playgroud)

我们正在尝试生成这个:

PKID   RollingSum    GroupID
----------------------------- ## Explanation: 
1      0             1        ## 0 - 1 < 0  => 0
2      0             1        ## 0 - 2 < 0 …
Run Code Online (Sandbox Code Playgroud)

postgresql aggregate window-functions running-totals

3
推荐指数
1
解决办法
4522
查看次数

按参数给出的区间范围聚合值

我有一个包含金额列和索引列的表。我希望构建一个查询,它总结了从给定开始索引到结束索引的每个结果间隔的给定间隔范围的数量 - 即“间隔范围”根据索引列对数据进行切片。对于这些组,将构建金额总和。
这是可能的吗?

SELECT sum(amount) from mytable
WHERE index between <startindex> and <endindex>
GROUP BY ...
Run Code Online (Sandbox Code Playgroud)

例子:

amount | index
55        1
88        5
45        6
86        7
87        10
88        11
57        16
58        17
59        20
60        21
Run Code Online (Sandbox Code Playgroud)

间隔范围为 5、起始索引 5 和结束索引 14 的查询应产生两个返回值:

  88+45+86 => 219
  87+88    => 175
Run Code Online (Sandbox Code Playgroud)

间隔范围为 4、起始索引 0 和结束索引 15 的查询应产生四个返回值:

  55       => 55
  88+45+86 => 219
  87+88    => 175
  --       => 0
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

postgresql aggregate

3
推荐指数
1
解决办法
1313
查看次数

如何选择多个值到数组中并循环?(postgres 9.3)

为了便于论证,我有一个简单的表格。我有一个选择 ids 并循环它们的函数,称为loop_test. 我可以选择一个 id 数组并循环它们,从而导致我在事务中进行更改。

CREATE OR REPLACE FUNCTION loop_test() RETURNS void AS $$
DECLARE
        _ids_array INTEGER[];
        _id INTEGER;
BEGIN
        SELECT ARRAY(SELECT id FROM loop_test) INTO _ids_array; 
        FOREACH _id IN ARRAY _ids_array
        LOOP
                UPDATE loop_test SET looped = TRUE WHERE id = _id;
        END LOOP;
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

桌子:

db=# \d loop_test;
      Table "public.loop_test"
    Column     |  Type   | Modifiers 
---------------+---------+-----------
 id            | integer | 
 other_id      | integer | 
 id_copy       | integer | 
 other_id_copy | integer | …
Run Code Online (Sandbox Code Playgroud)

postgresql aggregate array

3
推荐指数
1
解决办法
5万
查看次数

来自两个表 ORACLE 的总和值

我希望将两个不同表中的两个值用作第三个表中的总计。

例如:

  1. accommodationflight
  2. acc_price用价值从增加价值flight_price
  3. 将这些值相加以用于表预订 subtotal

我尝试过的事情;

SELECT  F.FLI_PRICE + AC.ACC_PRICEPN
INTO    R.SUBTOTAL
FROM    HOLIDAY_RESERVATION R, FLIGHT F, ACCOMMODATION AC;
Run Code Online (Sandbox Code Playgroud)

更新

我希望将 Leigh 的代码添加到触发器中,我尝试了以下操作,但出现了突变错误

CREATE OR REPLACE TRIGGER HR_SUBTOTAL
AFTER DELETE OR INSERT OR UPDATE ON HOLIDAY_RESERVATION
FOR EACH ROW
BEGIN
UPDATE HOLIDAY_RESERVATION R SET SUBTOTAL = 
   NVL((SELECT F.FLI_PRICE FROM FLIGHT F WHERE F.FLI_ID = R.IN_FLIGHT_ID), 0) +
   NVL((SELECT F.FLI_PRICE FROM FLIGHT F WHERE F.FLI_ID = R.OUT_FLIGHT_ID), 0) +
   NVL((SELECT AC.ACC_PRICEPN FROM ACCOMMODATION AC WHERE …
Run Code Online (Sandbox Code Playgroud)

oracle aggregate oracle-11g-r2

2
推荐指数
1
解决办法
1万
查看次数