标签: query

从同一个表中选择两个值但条件不同

我想将表中的值抓取到同一表中不同值的两个不同列中。使用此查询作为示例(注意选择是如何在别名为 2 个不同表的同一个表上的):

SELECT a.myVal, b.myVal 
FROM MyTable a, MyTable b
WHERE 
  a.otherVal = 100 AND
  b.otherVal = 200 AND
  a.id = b.id
Run Code Online (Sandbox Code Playgroud)

当我在我的数据集上运行这样一个相对简单的查询时,它可以工作 - 只是需要很长时间。有没有更好/更聪明的方式来编写这个查询?

query reporting

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

LIKE 选择文本中任意位置独立存在的单词

在此处输入图片说明

我有一个包含以下文本的表格,我要搜索的关键字是“搜索”。所以我写了一个查询

SELECT [ID]
  ,[TextValue]
FROM
   [dbo].[SearchLike]
WHERE
   [TextValue] LIKE '%Search%'
Run Code Online (Sandbox Code Playgroud)

Q.1如何修改查询,以便只返回文本中包含“搜索”的记录,而不是使用“LSearch”。即根据图像前三个记录只返回。?

sql-server-2008 query pattern-matching

7
推荐指数
2
解决办法
6008
查看次数

如何有效地查询和聚合规范化的 SQL 数据库?

关于在单个存储过程中返回多个聚合的最有效方法?

我有一个电子邮件类型的应用程序,想为用户选择所有消息(收件箱)。问题是我将电子邮件的标题部分规范化到数据库中,这样平面数据就会进入消息表,而从、到、抄送、密件抄送则存储到另一个表中。

根据 PK/ FK 关系。

我非常重视的一件事是 SQL 解决方案的效率,因为这将是多次执行的代码,并且可能是整个数据库中运行次数最多的 sql

这里的上下文是我的数据库模式的视图。

数据库架构

sql-server-2005 query

7
推荐指数
2
解决办法
3854
查看次数

查询性能

为什么

SELECT Barraportfolioname
FROM   portfolio
WHERE  id IN (SELECT DISTINCT i1.portfolioid
              FROM   Import i1
                     LEFT OUTER JOIN Import i2
                       ON i1.PortfolioID = i2.PortfolioID
                          AND i2.ImportSetID = 82
              WHERE  i1.ImportSetID = 83
                     AND i2.ID IS NULL)  
Run Code Online (Sandbox Code Playgroud)

需要 0 秒,而以下查询需要 5 秒。

SELECT DISTINCT p.BarraPortfolioName AS name
FROM   Import i1
       INNER JOIN Portfolio p
         ON p.ID = i1.PortfolioID
       LEFT OUTER JOIN Import i2
         ON i1.PortfolioID = i2.PortfolioID
            AND i2.ImportSetID = 82
WHERE  i1.ImportSetID = 83
       AND i2.ID IS NULL;  
Run Code Online (Sandbox Code Playgroud)

我正在使用 SQL Server。这两个表在查询中使用的所有列上都有索引,即portfolioid、id、importsetid。 …

performance sql-server query

7
推荐指数
2
解决办法
330
查看次数

如何存储和查询价格取决于一组复杂条件的产品?

我还没有决定数据库。我对 MySQl 有经验,并且对MongoDB很感兴趣。

让产品成为有线电视提供商的套餐:

{
    name: "Virgin TV",
    price: 20
},
{

    name: "Sky",
    price: 25
}
Run Code Online (Sandbox Code Playgroud)

每个包裹都有一些条件。的天空包例如可以是:

  • 前三个月的价格是XXX然后变成YYY
  • 如果您在 00:00 之后看电视是XXX-10
  • 如果您是第 N 个客户,您将享有 10% 的折扣。
  • ...

但Virgin 套餐的条件会有所不同

1) 我如何实际存储产品及其所有条件?

我只能想到为每个不同的条件创建类似存储过程的东西?

如果我不必标准化所有条件以适应数据库模式,那就太好了,因为新条件很容易来来去去。

编辑: 我已经意识到 2 个要点

  • MongoDB 支持匿名函数作为字段的值。
  • Map/Reduce 可以使用函数将一个集合转换为另一个集合

现在,我们的 Sky 包装及其状况可以轻松存储:

db.packages.insert({
    name:      "Sky"
    price:     25,
    condition: function(object, user_input){
        time_discount = user_input.time > 0 and user_input.time < 6 ? 10 : 0; …
Run Code Online (Sandbox Code Playgroud)

mongodb database-design query functions

7
推荐指数
1
解决办法
1114
查看次数

列的顺序对 INSERT 有显着影响吗?

对于这两个查询,我们是否体验到明显的性能差异?

INSERT INTO table (col1, col2, col3, col4, col5) ...
Run Code Online (Sandbox Code Playgroud)

INSERT INTO table (col5, col3, col1, col2, col4) ...
Run Code Online (Sandbox Code Playgroud)

是否需要INSERT按照表中列的顺序排列列?

mysql innodb performance query insert query-performance

7
推荐指数
1
解决办法
5024
查看次数

有没有更好的方法来创建动态频率上的动态时间平均序列?

我有一系列表格,其中包含从各种设备收集的大量高精度数据。收集它们的时间间隔各不相同,甚至在时间序列中徘徊。我的用户希望能够选择日期范围并以特定频率获得这些变量的平均值/最小值/最大值。这是我对此进行的第二次尝试,它有效,但我想知道是否有更好/更快的方法来实现这一目标?

declare @start datetime
declare @end datetime
set @start = '3/1/2012'
set @end = '3/3/2012'
declare @interval int
set @interval = 300

declare @tpart table(
dt datetime
);

with CTE_TimeTable
as
(
select @start as [date]
union all
select dateadd(ss,@interval, [date])
from CTE_TimeTable
where DateAdd(ss,@interval, [date]) <= @end
)
insert into @tpart
select [date] from CTE_TimeTable
OPTION (MAXRECURSION 0);


select t.dt, avg(c.x1), min(c.x1), max(c.x2), avg(c.x2), min(c.x2), max(c.x2)  from clean.data c ,
@tpart t 
where
ABS(DateDIFF(ss, t.dt , c.Date) ) <= …
Run Code Online (Sandbox Code Playgroud)

sql-server query t-sql

7
推荐指数
1
解决办法
1905
查看次数

相关子查询和连接:仍然是相同的执行计划?

我有一个这样的相关子查询(来自BOL):

SELECT DISTINCT c.LastName, c.FirstName, e.BusinessEntityID 
FROM Person.Person AS c JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = c.BusinessEntityID 
WHERE 5000.00 IN
    (SELECT Bonus
    FROM Sales.SalesPerson sp
    WHERE e.BusinessEntityID = sp.BusinessEntityID) ;
GO
Run Code Online (Sandbox Code Playgroud)

当我使用连接重写此查询时

select c.LastName, c.FirstName, e.BusinessEntityID, d.Bonus
from Person.Person as c 
    inner join HumanResources.Employee as e on e.BusinessEntityID = c.BusinessEntityID
    inner join Sales.SalesPerson as d on d.BusinessEntityID = c.BusinessEntityID
where Bonus = 5000.00
Run Code Online (Sandbox Code Playgroud)

看看实际的执行计划,它在两个查询中看起来完全一样。为什么?我在想,由于嵌套循环和执行计划看起来不同,相关子查询要慢得多?是不是因为这些表的数据不多?

query execution-plan sql-server-2008-r2

7
推荐指数
2
解决办法
1101
查看次数

在 PostgreSQL 中使用 WHERE 子句执行 TABLESAMPLE

我想使用 TABLESAMPLE 从 PostgreSQL 满足特定条件的行中随机采样。

这运行良好:

select * from customers tablesample bernoulli (1);
Run Code Online (Sandbox Code Playgroud)

但我不知道如何将条件嵌入脚本中。例如这个

select * from customers where last_name = 'powell' tablesample bernoulli (1);
Run Code Online (Sandbox Code Playgroud)

抛出这个错误:

SQL 错误 [42601]:错误:“tablesample”位置或附近的语法错误
:71

postgresql query random table where

7
推荐指数
1
解决办法
5779
查看次数

如果有容量,如何编写将乘客安排到公交车上的查询?

公共汽车和乘客到达车站。如果某时间有一辆公共汽车到达车站tbus ,并且某时间有一名乘客到达tpassenger where tpassenger <= tbus,则该乘客将尝试使用第一辆未超出容量的可用公共汽车。

如果公交车到达车站时等待的乘客数量超过了其容量capacity,则只有capacity乘客才会乘坐公交车。

我想输出每辆公交车上出现的用户(如果两个乘客同时到达,则应优先考虑passenger_id值较小的乘客)。

输入:

巴士表:

总线 ID 到达时间 容量
1 2 1
2 4 10
3 7 2

旅客表:

乘客 ID 到达时间
11 1
12 1
13 5
14 6
15 7

输出:

总线 ID 容量 b_到达 乘客 ID p_到达
1 1 2 1 11 1
2 10 4 1 12 1
2 10 4 2 无效的 无效的
2 10 4 3 无效的 无效的
2 10 4 …

sql-server query interview-question

7
推荐指数
1
解决办法
1116
查看次数