我有一个 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) 我有一个这样的表:
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) 我有一个表,其中一个名为price的列键入为varchar. 我想要这个列的最大值。我正在使用这个查询:
SELECT MAX(price) FROM product_management.`item_list`
Run Code Online (Sandbox Code Playgroud)
但结果是错误的。请解决这个问题。
我正在使用 [SB] SQLyog Ultimate Ver。9.0.2.0。
阅读以下博客后,我明白hash match聚合原因blocking。使用适当的索引,它可以作为stream aggregate.
我有一个数据库,其中包含 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
我有一个带有人口值的点网格。每个点都有一个 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。
在源表中,每一行代表特定活动一天的小时数。如何使用 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 提出的问题),我想尝试一下,看看它是如何在 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) 我有一个包含金额列和索引列的表。我希望构建一个查询,它总结了从给定开始索引到结束索引的每个结果间隔的给定间隔范围的数量 - 即“间隔范围”根据索引列对数据进行切片。对于这些组,将构建金额总和。
这是可能的吗?
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)
谢谢你的帮助!
为了便于论证,我有一个简单的表格。我有一个选择 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) 我希望将两个不同表中的两个值用作第三个表中的总计。
例如:
accommodation和flight acc_price用价值从增加价值flight_price 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) aggregate ×10
postgresql ×4
sql-server ×3
mysql ×2
array ×1
group-by ×1
oracle ×1
performance ×1
sum ×1