如果您提供了示例输入和输出,那么我们就可以进行测试了。
为了连接两个结果集,我们通常使用JOIN,在结果集之间使用一个公共列。
结果集中的公共列是Establishment,因此我们可以使用Establishment进行INNER JOIN。
total_sales
和
client_sales
是CTE,它基本上包含您提供的代码。
WITH total_sales AS (
SELECT
Establishment,
COUNT(*) AS tot_sales_by_estab
FROM
data_list
GROUP BY
Establishment
),
client_sales AS (
SELECT
Establishment,
client,
COUNT(*) AS Nbr_Sales
FROM
data_list
WHERE
client IN ('XXX', 'YYY', 'ZZZ')
GROUP BY
Establishment, client
)
SELECT
cs.Establishment,
cs.Client,
cs.Nbr_Sales,
ROUND((cs.Nbr_Sales * 100.0 / ts.tot_sales_by_estab), 2) AS %Total_sales
FROM
client_sales cs
INNER JOIN
total_sales ts ON cs.Establishment = ts.Establishment
ORDER BY
cs.Establishment, cs.Client;
编辑
:无CTE
SELECT
dl.Establishment,
dl.Client,
COUNT(*) AS Nbr_Sales,
ROUND((COUNT(*) * 100.0 / total_sales.tot_sales_by_estab), 2) AS %Total_sales
FROM
data_list dl
JOIN
(SELECT Establishment, COUNT(*) AS tot_sales_by_estab
FROM data_list
GROUP BY Establishment) AS total_sales
ON
dl.Establishment = total_sales.Establishment
WHERE
dl.Client IN ('XXX', 'YYY', 'ZZZ')
GROUP BY
dl.Establishment, dl.Client
ORDER BY
dl.Establishment, dl.Client;