在 Oracle 11.2 之前,我使用自定义聚合函数将一列连接成一行。11.2 增加了这个LISTAGG功能,所以我想改用它。我的问题是我需要消除结果中的重复项,但似乎无法做到这一点。
这是一个例子。
CREATE TABLE ListAggTest AS (
SELECT rownum Num1, DECODE(rownum,1,'2',to_char(rownum)) Num2 FROM dual
CONNECT BY rownum<=6
);
SELECT * FROM ListAggTest;
Run Code Online (Sandbox Code Playgroud)
CREATE TABLE ListAggTest AS (
SELECT rownum Num1, DECODE(rownum,1,'2',to_char(rownum)) Num2 FROM dual
CONNECT BY rownum<=6
);
SELECT * FROM ListAggTest;
Run Code Online (Sandbox Code Playgroud)
我想看到的是:
NUM1 NUM2
---------- ---------------------
1 2
2 2 << Duplicate 2
3 3
4 4
5 5
6 6
Run Code Online (Sandbox Code Playgroud)
这是一个listagg接近但不消除重复的版本。
SELECT Num1, listagg(Num2,'-') WITHIN GROUP (ORDER BY NULL) OVER …Run Code Online (Sandbox Code Playgroud) 我有 2 个存储过程,其中第二个存储过程是第一个的改进。
我正试图通过究竟有多少改进来衡量。
clock time由于执行时间不同,因此测量似乎不是一种选择。更糟糕的是,有时(很少,但确实发生过)第二个存储过程的执行时间比第一个过程的执行时间大(我猜是因为当时服务器的工作量)。
Include client statistics 也提供不同的结果。
DBCC DROPCLEANBUFFERS,DBCC FREEPROCCACHE很好,但同样的故事......
SET STATISTICS IO ON 可能是一种选择,但是由于我的存储过程中涉及许多表,我怎么能获得总分呢?
Include actual execution plan也可以是一个选择。我得到estimated subtreecost的0.3253的第一个存储过程,以及0.3079为第二个。我可以说第二个存储过程快 6% (=0.3253/0.3079) 吗?
使用 SQL Server Profiler 中的“读取”字段?
那么我怎么能说第二个存储过程比第一个过程快 x%,无论执行条件如何(服务器的工作量,执行这些存储过程的服务器等)?
如果不可能,我如何证明第二个存储过程比第一个存储过程具有更好的执行时间?
我将尝试从我的 SQL 服务器数据库中的数据制作一个图表。即使计数为零,我也会拥有所有街道以及居住在这条街道上的用户的计数。
为此,我试过这个查询:
Create table Streets(
ID int IDENTITY primary key,
Name varchar(100)
);
create table users(
ID int IDENTITY primary key,
Username varchar(100),
StreetID int references Streets(id)
);
insert into streets values ('1st street'), ('2nd street'), ('3rd street'),
('4th street'), ('5th street');
insert into users values ('Pol', 1), ('Doortje', 1), ('Marc', 2), ('Bieke', 2),
('Paulien', 2), ('Fernand', 2), ('Pascal', 2), ('Boma', 3),
('Goedele', 3), ('Xavier', 4);
select s.name as street, count(s.name) as count
from users u inner join …Run Code Online (Sandbox Code Playgroud) 搜索VARCHAR2Oracle 中列的大小是否会影响性能的报告似乎不一。
我想VARCHAR稍微解释一下大小的问题,并希望对此有所了解:
给定(多行)自由文本字段(不是名称之类的简短内容)要存储在(Oracle)数据库中,是否有任何意义(性能或其他)不最大化VARCHAR容量(VARCHAR2(4000)在 Oracle 上)而是选择较小的值,例如 1024 或 512,因为无论如何这在 98% 的情况下可能就足够了。
我的工作计算机上运行着一个 MySQL 服务器,它运行 Mac OS X Maverick。我想从也有 Mac OS Maverick 的家用电脑访问它。
从终端,如果在 1 个选项卡中,我 ssh 进入我的工作计算机并让 ssh 会话坐在那里而不会空闲,然后在另一个选项卡上,我可以访问 MySQL 服务器。
但是,如果没有 ssh 会话运行,我将收到以下错误
错误 2003 (HY000):无法连接到“SERVER_IP_ADDRESS”上的 MySQL 服务器 (60)
我试图my.cnf通过注释掉绑定地址或将其分配给来修改服务器上的文件,0.0.0.0但它不起作用。
为什么会这样?如何配置服务器以便它允许远程访问而无需在客户端上运行 ssh?有人可以帮忙吗?
早些时候,对我来说,关于是否(总是)使用/避免聚集索引的辩论/讨论没有定论。
好吧,我知道它们有时会在适当的+特定目的和上下文中使用。
“SQL Azure 不支持没有聚簇索引的表。一个表必须有一个聚簇索引。如果一个表是在没有聚簇约束的情况下创建的,那么在允许对该表进行插入操作之前必须先创建一个聚簇索引”
不符合先前的结论、理由和解释。
我在前面的解释中遗漏了严格要求无任何例外地普遍存在的聚集索引的基本原理是什么?
我有一些不是时间序列的数据库快照。例如:
快照第 1 天:
+----+---------------+------------+------------+
| ID | Title | Category | Date |
+----+---------------+------------+------------+
| 1 | My First Post | helloworld | 2015-01-01 |
+----+---------------+------------+------------+
Run Code Online (Sandbox Code Playgroud)快照第 2 天(今天添加了一个新帖子):
+----+----------------+------------+------------+
| ID | Title | Category | Date |
+----+----------------+------------+------------+
| 1 | My first post | helloworld | 2015-01-01 |
| 2 | My second post | other | 2015-01-02 |
+----+----------------+------------+------------+
Run Code Online (Sandbox Code Playgroud)快照第 3 天(今天删除了帖子 2):
+----+---------------+------------+------------+
| ID | Title | Category | Date |
+----+---------------+------------+------------+
| …Run Code Online (Sandbox Code Playgroud)我正在解决 MySQL 错误“尝试获取锁定时发现死锁;尝试重新启动事务”。
我将不得不更新程序以允许死锁。该SELECT语句是否可能会产生死锁错误?我知道它只是一个读锁,所以多重选择不会有问题,但是如果有一个INSERT, UPDATEorDELETE语句(可能有连接的子查询)和一个SELECT语句(可能有连接或子查询)怎么办?
是否有可能在SELECT而不是INSERT,UPDATE或上抛出错误DELETE。
如何将 插入ID到 SQL Server 的标识列中?我会在我的桌子上制作一个特殊的项目,我会通过ID. 因此,因为所有其他 ID 都大于或等于 1,所以我将赋予该特殊项目的 ID 为零。
现在的问题是,当我创建该表时,我已将列 ID 的标识设置为 true。如果我现在插入带有以下代码的特殊项目,则会出现下一个错误:
INSERT INTO MyTable(ID, Name, Description)
VALUES (0, 'Special title', 'special item');
Run Code Online (Sandbox Code Playgroud)
错误:
设置为
MyTable时,无法为表中的标识列插入显式值。IDENTITY_INSERTOFF
如何更改此表、列或属性,以便创建 ID 为零的记录?
sql-server ×4
mysql ×2
oracle ×2
performance ×2
aggregate ×1
couchdb ×1
deadlock ×1
errors ×1
group-by ×1
identity ×1
index ×1
innodb ×1
insert ×1
join ×1
mac-os-x ×1
mysql-5 ×1
nosql ×1
scalability ×1
terminology ×1
varchar ×1