【问题标题】:Chosing the right query选择正确的查询
【发布时间】:2015-04-02 14:21:26
【问题描述】:

我必须构建一个查询,该查询将为客户创建一个表 - 'Frank Spencer'(您将在下面的客户表中看到他)。

新表应该包含客户曾经购买过的每件产品的总和,排除那些尚未发货的订单,每件产品在新表中只出现一次。

我的表格如下。

您能告诉我以下哪个是最好的吗?

a)with customer as (select * from customers where lower(CustomerName) = 'frank spencer'),customerorders as(select OrderId from orders o where o.CustomerId in(select CustomerId from customer) and OrderShipped = 'True') select sum(oi.QuantityOrdered) as TotalOrdered, s.ItemName into franksorders from orderitems oi join stock s on oi.StockItemId = s.StockItemId where OrderId in(select * from customerorders) group by ItemName order by ItemName

b)with customer as (select * from customers where lower(CustomerName) = 'frank spencer') join customerorders as(select OrderId from orders o where o.CustomerId in(select CustomerId from customer) and OrderShipped = 'True') select total(oi.QuantityOrdered) as TotalOrdered, s.ItemName into new table franksorders using orderitems oi join stock s on oi.StockItemId = s.StockItemId where OrderId in(select * from customerorders) group by ItemName order by ItemName

c)with customer (select * from customers where 'frank spencer' in (CustomerName)) with customerorders (select OrderId from orders o where o.CustomerId in(select CustomerId from customer) and OrderShipped = 'True') select sum(oi.QuantityOrdered) as TotalOrdered, s.ItemName create table franksorders using orderitems oi join stock s on oi.StockItemId = s.StockItemId where OrderId in(select * from customerorders) group by ItemName order by ItemName

d)using customer with (select * from customers where CustomerName = 'frank spencer' and customerorders with(select OrderId from orders o where o.CustomerId in(select CustomerId from customer) then OrderShipped = 'True') select sum(oi.QuantityOrdered) as TotalOrdered, s.ItemName into franksorders from orderitems oi join stock s on oi.StockItemId = s.StockItemId where OrderId in(select * from customerorders) group by ItemName order by ItemName

【问题讨论】:

  • 在你的测试中,哪一个在最短的时间内返回了想要的结果?
  • 你只是复制了一些学校任务并想要得到答案...
  • 这看起来非常像家庭作业。但撇开这些不谈,“最佳”的定义是什么?您实际尝试过什么?
  • 我认为整个概念存在很大缺陷。这是存储计算出来的信息,从长远来看,这将是痛苦的。您将不得不设计各种代码以使该表保持最新。这将更适合作为视图而不是持久表。
  • E) 以上所有!

标签: sql sql-server tsql subquery


【解决方案1】:

B、C 和 D 中有一个 USING,据我所知,SQL Server 不支持。使用是,但不是使用。所以答案是A。下次你可以使用poorsql.com这样格式化你的代码,这样更容易发现错误。

WITH customer
AS (
    SELECT *
    FROM customers
    WHERE lower(CustomerName) = 'frank spencer'
    )
    ,customerorders
AS (
    SELECT OrderId
    FROM orders o
    WHERE o.CustomerId IN (
            SELECT CustomerId
            FROM customer
            )
        AND OrderShipped = 'True'
    )
SELECT sum(oi.QuantityOrdered) AS TotalOrdered
    ,s.ItemName
INTO franksorders
FROM orderitems oi
INNER JOIN stock s ON oi.StockItemId = s.StockItemId
WHERE OrderId IN (
        SELECT *
        FROM customerorders
        )
GROUP BY ItemName
ORDER BY ItemName

【讨论】:

    猜你喜欢
    • 2021-07-29
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多