【问题标题】:MySQL INNER JOIN from second table (TOP10)来自第二个表的 MySQL INNER JOIN (TOP10)
【发布时间】:2015-02-14 05:39:46
【问题描述】:
$stmt = $conn->prepare('选择 a.*, c.*, SUM(a.money+b.RESULT) 作为结果
来自用户
    INNER JOIN 银行账户 c
        ON a.id = c.owner
    内部联接
    (
        选择所有者,总和(金额)作为结果
        从银行账户
        按所有者分组
    ) b ON a.id = b.owner
    ORDER BY ARESULT DESC LIMIT 10');

什么问题,它只显示错误的一条记录?我想列出最多 10 条记录 - 比如拥有 [money+(all his bankaccounts amount)] 的 TOP 10 最富有的人

假设.. 我有 2 张桌子。

表:用户

ID | username | money

1  | richman | 500

2  | richman2 | 600

表格:银行账户

ID | owner | amount

65 | 1     | 50

68 | 1     | 50

29 | 2     | 400

所以它会列出:

  1. richman2 1000$

  2. 富豪600美元

【问题讨论】:

    标签: mysql sql select group-by sum


    【解决方案1】:

    试试这个:

    SELECT  a.*, (a.money + b.RESULT) AS ARESULT
    FROM users a 
    INNER JOIN (SELECT owner, SUM(amount) AS RESULT
                FROM bankaccounts
                GROUP BY owner
              ) b ON a.id = b.owner
    ORDER BY ARESULT DESC 
    LIMIT 10
    

    【讨论】:

      【解决方案2】:

      尝试使用子查询...

      $stmt = $conn->prepare('SELECT  a.*, 
          IFNULL((SELECT SUM(amount) FROM bankaccounts b WHERE b.owner=a.id),0) AS BANK_MONEY,
          (IFNULL(a.money,0) + IFNULL((SELECT SUM(amount) FROM bankaccounts c WHERE c.owner=a.id),0)) AS ARESULT
          FROM users a 
          ORDER BY ARESULT DESC LIMIT 0, 10');
      

      编辑:为银行账户总额添加了一个字段

      EDIT2:在 SQL 语句中添加 IFNULL,以防用户不在 BankAccounts 表中

      【讨论】:

      • 感谢您的回复,但还是有问题。 link
      • 这是因为如果用户不在银行帐户表中,则不会显示。现在就试试。我在 SQL 语句中添加了 IFNULL 函数来处理这个问题。
      猜你喜欢
      • 2013-03-02
      • 1970-01-01
      • 1970-01-01
      • 2012-09-13
      • 2018-07-17
      • 2012-03-11
      • 2016-07-04
      • 2011-03-12
      • 1970-01-01
      相关资源
      最近更新 更多