我有一个名为users_preferred_zips的表,如下所示:

 username  |  price  |   zip   |  program  |  active
-----------+---------+---------+-----------+---------
 joe       |    5    |  92108  |  dog      |    1
 tom       |    7    |  92108  |  dog      |    1
 mary      |    5    |  92108  |  dog      |    1
 paul      |    6    |  92108  |  dog      |    1
 ron       |    6    |  92108  |  dog      |    1

我还有一个叫做users的表,看起来像这样
 username  |  balance
-----------+----------
 joe       |    10
 tom       |    12
 mary      |    2
 paul      |    14
 ron       |    3

我需要一个查询来拉取users_preferred_zips表中的3个最高值,其中username表中的users值大于或等于5。我知道我需要做一些balance的工作,但是我下面的查询不起作用。以下是我的问题:
SELECT SUM(price) AS SumOfTopValues
FROM (
    SELECT users_preferred_zips . * , users.last_purchase, users.lesson_type, users.pref_acct_balance
    INNER JOIN users ON ( users_preferred_zips.username = users.username )
    WHERE users_preferred_zips.zip =  '92108'
    AND users_preferred_zips.program =  'dog'
    AND users_preferred_zips.active =  1
    AND users.pref_acct_balance >= '5'
    ORDER BY price DESC
    LIMIT 3
) AS sub

因此正确的查询将拉取以下内容:
3最高:
joe   |  5
tom   |  7
paul  |  6

3个最高值之和=18
我觉得这应该很简单,但我有一个艰难的时间!谢谢你的帮助

最佳答案

您可以使用以下方法检查:

SELECT SUM(price) AS SumOfTopValues
FROM users_preferred_zips
WHERE username IN (
  SELECT username
  FROM users
  WHERE pref_acct_balance >= 5
)

关于php - 使用内部联接查找前3个值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10450818/

10-13 07:21