为我(可能)滥用措词表示歉意,但我在编写查询时遇到一些麻烦。
基本上,我正在生成一个表格,每个购物者一行,每一个杂货一行,在其中我们可以找到他们的访问次数的百分比他们购买了 item 。我正在从子查询生成该表,其输出看起来像:
Shopper | Visit | Butter | Milk | Eggs
Bill | A | 1 | 0 | 1
Bill | B | 0 | 1 | 1
John | C | 0 | 1 | 0
John | D | 1 | 1 | 1
这样,我的主查询显示以下内容:
Shopper | Butter % | Milk % | Eggs %
Bill | 50% | 50% | 100%
John | 50% | 100% | 50%
我实质上是将标记的总和除以总访问次数,再按购物者分组。
但是,我想在底部添加一行以显示所有购物者的百分比,这样我的最终表格将是:
Shopper | Butter % | Milk % | Eggs %
Bill | 50% | 50% | 100%
John | 50% | 100% | 50%
All | 50% | 75% | 75%
我最初的想法是为此创建一个单独的子查询,其中我模仿了获取百分比的逻辑(但是将“分组依据”留空以获取所有购物者的百分比)。我在将此行附加到最终表的底部时遇到了一些麻烦。
我确实找到了INSERT语句,并且知道有几种不同的方法可以包含它,但是我不确定在主查询的上下文中该语法是什么样的。
也许有一种更直接的解释方式,但是如果我的一般格式是
WITH <Subquery creation>,
<Subquery 2 creation>
SELECT <create percent columns>
FROM <Subquery table>
WHERE ...
GROUP BY ...
我在弄清楚这样的INSERT语句适合的位置时遇到了麻烦。
这完全有可能做到这一点,我也乐意接受。任何建议将不胜感激!
答案 0 :(得分:1)
您可能可以使用grouping sets
。在您的group by
中,更改:
group by shopper
收件人:
group by grouping sets ( (shopper), () )
在group by
的{{3}}中对此语法进行了说明。
答案 1 :(得分:1)
另一种选择是UNION
您的结果集,因为您有两个有效的查询。您可以在CTE之间加上逗号。
WITH
Subquery1 AS
<logic>
, Subquery2 AS
<logic>
SELECT * FROM Subquery1
UNION
SELECT * FROM Subquery2;