【问题标题】:sql Query for max transactionsql查询最大事务
【发布时间】:2015-06-29 07:41:27
【问题描述】:

我有一张这样的桌子

我要选择Acct_id, 已完成最大交易次数的用户的交易次数。

select Acct_id,max(num) From (select Acct_id, count(Acct_id) as num from Transactions group by Acct_id);

我上面的 sql 查询给了我错误- 每个派生表都必须有自己的别名

为什么我的查询在没有别名的情况下会失败?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您的查询必须是:-

    SELECT Acct_id, MAX(num) 
    FROM (SELECT Acct_id, COUNT(Acct_id) AS num 
          FROM Transactions 
          GROUP BY Acct_id) TAB;
    

    【讨论】:

    • 为什么我的查询在没有别名的情况下会失败?
    • SQL 按名称识别每个数据集。因此,当您进行子选择时,它会临时创建一个没有名称的数据集。当您尝试从该数据集中获取数据时,它会给您一个命名错误。一旦命名一切都整理好了。
    【解决方案2】:

    你需要给子选择一个别名:

    SELECT ...
     FROM (SELECT ...) AS anyAlias
     GROUP BY ...;
    

    【讨论】:

    • 为什么我的查询在没有别名的情况下会失败?
    • 因为子选择“创建”了一个临时表,需要一个名称才能被引用。
    【解决方案3】:

    您的解决方案:

      select Acct_id,max(num) From (select Acct_id, count(Acct_id) as num 
      from Transactions group by Acct_id) as alias;
    

    另一种解决方案:

    select count(*) as total from transactions 
    group by acct_id 
    order by total desc limit 0,1 
    

    【讨论】:

    • 为什么我的查询在没有别名的情况下会失败?
    • 您正在使用 (query) 创建另一种虚拟表,,, sql 需要知道该临时结果集的名称,以便您可以将其命名为任何名称……它甚至可以是 myNewTable。 .任何东西..
    【解决方案4】:

    您的子选择表需要一个别名:

    select 
        Acct_id,
        max(num) 
    From (
        select 
            Acct_id, 
            count(Acct_id) as num 
        from Transactions 
        group by Acct_id
    ) as temp;
    

    【讨论】:

      【解决方案5】:

      您的查询是正确的,但问题是不能像这样指定子查询表名

      select Acct_id,max(num) From (select Acct_id, count(Acct_id) as num from Transactions group by Acct_id) a;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-07-24
        • 1970-01-01
        • 1970-01-01
        • 2019-02-15
        • 2012-01-09
        • 2011-06-23
        • 2013-01-06
        相关资源
        最近更新 更多