【问题标题】:Append a column from a query result to another in SQL将查询结果中的一列附加到 SQL 中的另一列
【发布时间】:2021-06-09 16:04:11
【问题描述】:

我的第一个查询是:

SELECT client.name, client.balance, SUM(payment.amount) AS paid
FROM client, payment
WHERE payment.clientid = client.client_id
GROUP BY client.name, client.balance

这给出了以下结果:

|Name  | Balance | Paid|
|------|---------|-----|
|name1 |5000     |125  |
|name2 |6000     |150  |

我的第二个查询是:

SELECT client.name, client.balance,  SUM(price) AS due
FROM client, reservation, trip, excursion 
WHERE client.client_id = reservation.client_id AND
        trip.tripid = reservation.tripid AND
        trip.exname = excursion.exname
GROUP BY client.name, client.balance

它给出了:

|Name  | Balance | Due |
|------|---------|-----|
|name1 |5000     |250  |
|name2 |6000     |100  |
|name3 |3000     |100  |
|name4 |1000     |100  |

如何合并这两个结果以得到一个包含已付款和到期值的表:

|Name  | Balance | Due | Paid|
|------|---------|-----|-----|
|name1 |5000     |250  |125  |
|name2 |6000     |100  |150  |
|name3 |3000     |100  |     |
|name4 |1000     |100  |     |

【问题讨论】:

  • 数据库是什么?
  • 请使用 SQL-92 中的现代连接语法。
  • 我正在使用 oracle

标签: sql database oracle


【解决方案1】:

获得所需结果的最简单方法是将这两个查询视为“表表达式”并将它们连接起来。

例如,你可以这样做:

select
  x.*,
  y.paid
from (
  SELECT client.name, client.balance,  SUM(price) AS due
  FROM client
  JOIN reservation ON client.client_id = reservation.client_id
  JOIN trip ON trip.tripid = reservation.tripid
  JOIN excursion ON trip.exname = excursion.exname
  GROUP BY client.name, client.balance
) x
left join (
  SELECT client.name, client.balance, SUM(payment.amount) AS paid
  FROM client
  JOIN payment ON payment.clientid = client.client_id
  GROUP BY client.name, client.balance
) y on y.name = x.name

我根据现代标准重新表述了 JOIN。避免使用 80 年代的逗号分隔的 FROM 语法。

现在,我确信有更短的方法可以更简单。

【讨论】:

  • 谢谢你的工作,有什么地方可以让我了解它是如何工作的吗?
  • @Astros 这是标准 SQL。那里有很多资源。我认为你应该从谷歌搜索“SQL JOIN”、“SQL LEFT JOIN”和“SQL 子查询”开始。
【解决方案2】:

下面的代码 sn-p 应该可以工作

SELECT
    client.name,
    client.balance,
    SUM(price) AS due,
    SUM(payment.amount) AS paid
FROM
    client,
    payment,
    reservation,
    trip,
    excursion
WHERE
    payment.clientid = client.client_id
    AND client.client_id = reservation.client_id
    AND trip.tripid = reservation.tripid
    AND trip.exname = excursion.exname
GROUP BY
    client.name,
    client.balance

【讨论】:

  • 我不认为平衡分组是个好主意
猜你喜欢
  • 2017-05-29
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
  • 1970-01-01
  • 2015-01-23
  • 1970-01-01
  • 1970-01-01
  • 2014-09-24
相关资源
最近更新 更多