Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 通过嵌套组合查询_Sql_Nested - Fatal编程技术网

Sql 通过嵌套组合查询

Sql 通过嵌套组合查询,sql,nested,Sql,Nested,通过下面的查询,我从“PRICING”表中获取价格……我必须创建用户ID,以便可以使用它连接到第二个名为“Demographics”的表 我想要的是从下面的查询中得到的“总成本” Select concat(b.ID_Symbol, ' ', b.ID_Number) AS 'UserID’, SUM(a.Price) AS 'Total Cost' From Pricing a Left Join User_Info b On a.unique = B.unique Sele

通过下面的查询,我从“PRICING”表中获取价格……我必须创建用户ID,以便可以使用它连接到第二个名为“Demographics”的表 我想要的是从下面的查询中得到的“总成本”

Select concat(b.ID_Symbol, ' ', b.ID_Number) AS 'UserID’,
SUM(a.Price) AS 'Total Cost'
From Pricing        a 
Left Join User_Info b On a.unique = B.unique
Select
UserID
Name,
Address,
Phone
FROM Demographics
我所拥有的:

USER ID Total Cost
A22     100
B33     200
C44     300
…并将其附加到下面的查询

Select concat(b.ID_Symbol, ' ', b.ID_Number) AS 'UserID’,
SUM(a.Price) AS 'Total Cost'
From Pricing        a 
Left Join User_Info b On a.unique = B.unique
Select
UserID
Name,
Address,
Phone
FROM Demographics
我想要的是:

USER ID  Name       Address      Phone      Total Cost
A22      John Doe   777 5th St   555-5555   100
B33      Sammy Singh222 3rd Blvd 555-5000   200
C44      Melissa Doe555 1st ave  555-5500   300

如果这是一种正确的方法,我不知道如何、在哪里以及如何嵌套查询……需要一点帮助吗?

Hmmm。您似乎需要额外的
加入

select d.UserID, d.Name, d.Address, d.Phone,
       SUM(p.Price) AS TotalCost
from Pricing p join
     User_Info ui
     on p.unique = ui.unique join
     demographics d
     on d.userid = concat(ui.ID_Symbol, ' ', ui.ID_Number)
group by d.UserID, d.Name, d.Address, d.Phone

嗯。您似乎需要额外的
加入

select d.UserID, d.Name, d.Address, d.Phone,
       SUM(p.Price) AS TotalCost
from Pricing p join
     User_Info ui
     on p.unique = ui.unique join
     demographics d
     on d.userid = concat(ui.ID_Symbol, ' ', ui.ID_Number)
group by d.UserID, d.Name, d.Address, d.Phone

编辑:我注意到的另一件事是
CONCAT
函数的使用。如果您使用的是Oracle,那么它是不正确的,因为
CONCAT
只接受2个值

您还可以通过创建CTE的冗长方法来实现这一点。您尚未标记DB,但这是一个通用解决方案:

with cte1 as
(
  Select
    b.ID_Symbol || ' ' || b.ID_Number AS 'UserID',
    SUM(a.Price) AS 'Total Cost'
  From Pricing a 
  Left Join User_Info b On a.unique = B.unique
  group by b.ID_Symbol, b.ID_Number
)
,cte2 as
(
  Select UserID, Name, Address, Phone
  FROM Demographics
)
select b.UserID, b.Name, b.Address, b.Phone, a."Total Cost"
from cte1 a
join cte2 b on a.UserID=b.UserID

编辑:我注意到的另一件事是
CONCAT
函数的使用。如果您使用的是Oracle,那么它是不正确的,因为
CONCAT
只接受2个值

您还可以通过创建CTE的冗长方法来实现这一点。您尚未标记DB,但这是一个通用解决方案:

with cte1 as
(
  Select
    b.ID_Symbol || ' ' || b.ID_Number AS 'UserID',
    SUM(a.Price) AS 'Total Cost'
  From Pricing a 
  Left Join User_Info b On a.unique = B.unique
  group by b.ID_Symbol, b.ID_Number
)
,cte2 as
(
  Select UserID, Name, Address, Phone
  FROM Demographics
)
select b.UserID, b.Name, b.Address, b.Phone, a."Total Cost"
from cte1 a
join cte2 b on a.UserID=b.UserID
使用select子句中的子查询: 使用from子句中的子查询: 使用select子句中的子查询: 使用from子句中的子查询:
旁注:1。为什么是左外连接?你似乎只想要一个内在的结合。2. <代码>作为“用户ID”和
作为“总成本”
是无效的SQL。标准名称分隔符是双引号:
作为“UserID”
。3.请为表选择助记符别名(例如,定价p中的
,而不是定价a中的
)。别名应该增加查询的可读性,而不是减少它。为什么是左外连接?你似乎只想要一个内在的结合。2. <代码>作为“用户ID”
作为“总成本”
是无效的SQL。标准名称分隔符是双引号:
作为“UserID”
。3.请为表选择助记符别名(例如,定价p
中的
,而不是定价a中的
)。别名应增加查询的可读性,而不是降低查询的可读性。由于总和的原因,是否需要group by或order by?@shade206:第一个子查询是相关的,即它引用主查询中的行(
,其中…=d.userid
)。因此,我们只为一个userid选择一个值,而不需要在此处使用
groupby
。你可以想象这是一个循环;对于
demographics
中的每个用户ID,将运行子查询。另一方面,第二个查询使用的是
groupby
,因为我正在计算每个用户ID的总数,并将其加入到
demographics
行中。而
orderby
与聚集无关。
ORDER BY
的唯一有效位置是在查询的末尾,它只会对结果进行排序,不会以任何方式影响结果。是否会因为求和而需要group BY或ORDER BY?@shade206:第一个子查询是相关的,即它引用主查询中的行(
其中…=d.userid
)。因此,我们只为一个userid选择一个值,而不需要在此处使用
groupby
。你可以想象这是一个循环;对于
demographics
中的每个用户ID,将运行子查询。另一方面,第二个查询使用的是
groupby
,因为我正在计算每个用户ID的总数,并将其加入到
demographics
行中。而
orderby
与聚集无关。查询结束时,
orderby
的唯一有效位置是,它只会对结果进行排序,不会以任何方式影响结果。