gpt4 book ai didi

sql - 请解释如何使用派生表将此 SQL 表示为单个语句

转载 作者:行者123 更新时间:2023-11-30 23:40:01 24 4
gpt4 key购买 nike

为了我自己的启发,我尝试在不使用临时表的情况下在单个语句中编写此 SQL 功能。在我的生活中,如果没有 MySQL“错误 1248 (42000):每个派生表都必须有自己的别名。”,我就无法使查询正常工作。

这里有一些类似于我想要的东西,尽管有些破损:

SELECT split.share, split.weight, split.creditor, split.debtor, share.amount, wsum.sum
FROM (
SELECT split.share, split.weight, split.creditor, split.debtor, share.amount
FROM ( split LEFT JOIN share ON split.share = share.id )
WHERE debtor = 6 OR creditor = 6 )
LEFT JOIN (
SELECT split.share, SUM(weight) AS sum
FROM split
GROUP BY split.share
) wsum
ON split.share = wsum.share;

这是我尝试使用临时表表达的工作版本:

CREATE TEMPORARY TABLE weightsum (share INT, sum INT);

INSERT INTO weightsum (share, sum)
SELECT split.share, SUM(weight) AS sum
FROM split
GROUP BY split.share;

CREATE TEMPORARY TABLE summary (share INT, weight INT, creditor INT, debtor INT, amount DECIMAL(10,2));

INSERT INTO summary (share, weight, creditor, debtor, amount)
SELECT split.share, split.weight, split.creditor, split.debtor, share.amount
FROM (split LEFT JOIN share ON split.share = share.id)
WHERE debtor = 6 OR creditor = 6;

SELECT summary.share, summary.weight, weightsum.sum, summary.creditor, summary.debtor, summary.amount, ((summary.amount / weightsum.sum) * summary.weight) AS split_amount
FROM summary LEFT JOIN weightsum
ON summary.share = weightsum.share;

感谢您的帮助。

最佳答案

试试这个:

SELECT split.share, split.weight, split.creditor, split.debtor, share.amount, wsum.sum
FROM (
SELECT split.share, split.weight, split.creditor, split.debtor, share.amount
FROM split
LEFT JOIN share
ON split.share = share.id
WHERE debtor = 6 OR creditor = 6
) As split
LEFT JOIN (
SELECT split.share, SUM(weight) AS sum
FROM split
GROUP BY split.share
) wsum
ON split.share = wsum.share;

或者更正确的写法:

SELECT split.share, split.weight, split.creditor, split.debtor, share.amount, wsum.sum
FROM split
LEFT JOIN share
ON split.share = share.id
LEFT JOIN (
SELECT split.share, SUM(weight) AS sum
FROM split
GROUP BY split.share
) wsum
ON split.share = wsum.share
WHERE split.debtor = 6 OR split.reditor = 6;

关于sql - 请解释如何使用派生表将此 SQL 表示为单个语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4212561/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com