【发布时间】:2022-01-15 12:16:03
【问题描述】:
所以我有这个表是由查询产生的。有没有办法将同一用户名的所有购买组合起来,并按 desc 顺序排列,以便在同一查询中找到最忠诚的客户?也许将它保存到一个变量然后做点什么?
| username | number_of_purchase |
|---|---|
| Bob | 1 |
| Marry | 3 |
| Mike | 2 |
| Bob | 2 |
| Marry | 3 |
| Mike | 4 |
| Ariana | 3 |
| Sally | 1 |
【问题讨论】:
所以我有这个表是由查询产生的。有没有办法将同一用户名的所有购买组合起来,并按 desc 顺序排列,以便在同一查询中找到最忠诚的客户?也许将它保存到一个变量然后做点什么?
| username | number_of_purchase |
|---|---|
| Bob | 1 |
| Marry | 3 |
| Mike | 2 |
| Bob | 2 |
| Marry | 3 |
| Mike | 4 |
| Ariana | 3 |
| Sally | 1 |
【问题讨论】:
这应该做的工作! 您可以在此处阅读有关 CTE 的信息 - https://docs.microsoft.com/en-us/sql/t-sql/queries/with-common-table-expression-transact-sql?view=sql-server-ver15。
with users as (
**YOUR QUERY HERE **
)
Select username, sum(number_of_purchase) from users
group by username
来自 Microsoft 网站的示例:
-- Define the CTE expression name and column list.
WITH Sales_CTE (SalesPersonID, SalesOrderID, SalesYear)
AS
-- Define the CTE query.
(
SELECT SalesPersonID, SalesOrderID, YEAR(OrderDate) AS SalesYear
FROM Sales.SalesOrderHeader
WHERE SalesPersonID IS NOT NULL
)
-- Define the outer query referencing the CTE name.
SELECT SalesPersonID, COUNT(SalesOrderID) AS TotalSales, SalesYear
FROM Sales_CTE
GROUP BY SalesYear, SalesPersonID
ORDER BY SalesPersonID, SalesYear;
【讨论】:
取决于您的 MySql 版本。如果在 v8 之前,那么您可以使用 派生表,基本上,将现有查询包装如下
Select username, sum(number_of_purchase) purchases
from (
> Existing query <
)t
group by username
order by purchases desc
如果您使用的是 MySql 8,您可以在现有查询中使用 窗口函数 来具体化每个用户的购买总和,然后您可以订购。
如果没有您现有的查询,我只能建议您使用适用的列名合并以下内容
sum(purchase count column) over(partition by username) TotalPurchases
【讨论】: