【问题标题】:Operating on a table received from query within the same query SQL对从同一查询 SQL 中的查询接收到的表进行操作
【发布时间】: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

【问题讨论】:

    标签: mysql sql


    【解决方案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; 
    

    【讨论】:

    • 效果很好!只需要添加订单。谢谢!
    【解决方案2】:

    取决于您的 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
    

    【讨论】:

    • 这也有效!!只需要添加组。谢谢!
    • 啊,确实,不知何故,剪切和粘贴失败了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 2021-11-08
    相关资源
    最近更新 更多