相关疑难解决方法(0)

SQL操作顺序

如果我运行以下SQL查询

SELECT * 
FROM A
LEFT JOIN B
ON A.foo=B.foo
WHERE A.date = "Yesterday"
Run Code Online (Sandbox Code Playgroud)

请问WHERE声明得到之前或之后的评价JOIN

如果之后,什么是更好的方式来编写此语句,以便只返回A从中的行"Yesterday"连接到B

sql optimization join where sql-execution-plan

10
推荐指数
3
解决办法
8970
查看次数

在哪里与GROUP BY相比具有表现

所以我被分配来评估两个查询的性能并得出了令人惊讶的结果.我之前被告知HAVING比较慢,WHERE因为它只在访问行后过滤结果.这似乎是合理的,这个关于SQL子句执行顺序的问题强调了这一点.

但是,我估计以下查询的性能有一些假设,似乎使用HAVING执行实际上更快!

SELECT status, count(status)
FROM customer
GROUP BY status
HAVING status != 'Active' AND status != 'Dormant'

SELECT status, count(status)
FROM customer
WHERE status != 'Active' AND status != 'Dormant'
GROUP BY status
Run Code Online (Sandbox Code Playgroud)

假设是:

  • 该表CUSTOMER有100 000条记录
  • 访问行的成本是0.01ms(SELECT + COUNT)
  • 执行条款的成本是0.005毫秒
  • 有三种类型的客户状态,上面两个和'已故'
  • 有15000名"死者"客户

基于此,我的估计是:

First query:
    Accessing all rows, FROM: 100 000 * 0.01ms = 1000ms
    GROUP BY: 100 000 * 0.005ms = 500ms
    HAVING (2 conditions, 3 groups): 2 …
Run Code Online (Sandbox Code Playgroud)

sql oracle performance where having

6
推荐指数
1
解决办法
375
查看次数

Oracle SQL 子句求值顺序

在 Oracle 中,首先评估哪些子句类型?如果我有以下内容(假装 .... 代表有效的表达式和关系名称),评估的顺序是什么?

SELECT   ...
FROM     .....
WHERE    ........
GROUP BY ...........
HAVING   .............
ORDER BY ................
Run Code Online (Sandbox Code Playgroud)

我的印象是 SELECT 子句是最后评估的,但除此之外我一无所知。

sql oracle clause operator-precedence

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

在 HAVING 子句中重用计算列

请看下面的查询

SELECT 
    product_id, SUM(unit_price * quantity) Total
FROM 
    tblOrders
GROUP BY 
    product_id
HAVING
    SUM(unit_price * quantity) > 1000
Run Code Online (Sandbox Code Playgroud)

上面的查询工作正常。但是您可以在其中看到查询中,Total是一个计算列,并且在子句中再次使用相同的计算HAVING

如何避免在HAVING子句中使用相同的计算?

sql t-sql sql-server

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

SQL - WHERE AGGREGATE> 1

想象一下,我有一个包含{id,username,firstname,lastname}的客户的数据库表

如果我想找到有多少个不同名字的实例我可以做:

select firstname,count(*) from Customers group by 2 order by 1;

   username | count(*)
   ===================
   bob      |   1
   jeff     |   2
   adam     |   5
Run Code Online (Sandbox Code Playgroud)

如何编写相同的查询只返回多次出现的名字?即在上面的例子中只返回jeff和adam的行.

sql informix aggregate

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

SQL查询,执行顺序

如果查询同时包含group by和order by子句,那么SQL后面的执行顺序是什么.它取决于它们在查询中的位置???

sql sql-execution-plan

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

在Sql中首先评估“位置”或“具有”的内容

在Sql中首先评估“位置”或“具有”的内容

sql database

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

mySQL命令在使用'GROUP BY'和'WHERE ... IN'时出错

我有一个包含以下列的表:DATE, TICKER, and ID. 基本上,我正在尝试使用下面的代码选择所有的代码及其相应的ID(它可以有多个ID).但是,在表中,有多个条目,其中代码可以具有相同的ID,但属于不同的日期,因此在这种情况下,我选择具有最小日期的ID.

SELECT 
       MIN(DATE), 
       TICKER, 
       ID 
FROM Names 
GROUP BY 
        TICKER, 
        ID 
WHERE TICKER IN ('A', 'B')
Run Code Online (Sandbox Code Playgroud)

现在,当我独立地尝试命令时,它可以工作,但是当我将命令GROUP BYWHERE IN命令组合在一起时,我认为出现了问题,因为我收到语法错误.

如果有什么不清楚,请告诉我,我会尽力澄清一下.

mysql sql

0
推荐指数
1
解决办法
62
查看次数