高级MySQL查询(基于2个其他表的排名结果)

时间:2013-12-26 17:25:59

标签: mysql sql

我一直试图让这项工作暂时正常,但是我无法理解如何解决这个问题,希望有人可以帮助我!

我有三张桌子:

Table A
Table B
Table C

我希望从表A中获得前十名的结果,这些结果将取决于表B和表C中的信息。排名将使用以下公式:

Ranking = (COUNT(id) 
    from table C 
    WHERE c.a_id = a.id) as count_weight + 
    (COUNT(id) 
    FROM table B 
    WHERE b.a_id = a.id)*(count_weight*0.25) + a.views

在单词中,我希望排名等于由以下各项确定的点值:

  1. 表C中与我感兴趣的表A中的记录相对应的记录数
  2. 如果表B中存在与我感兴趣的表A中的记录相对应的记录,我希望点数额外增加25%(从#1获得的点数乘以0.25) - 在在这种情况下,记录将存在或不存在,因此它将始终为0或1
  3. 表A(表A的字段)中记录的每个“视图”的分数
  4. 希望我以一种可以理解的方式措辞!

    谢谢!

1 个答案:

答案 0 :(得分:2)

我认为这就是你所追求的:

SELECT a.*, COUNT(c.id) * IF(COUNT(b.id),1.25,1) + a.views AS Ranking
FROM a LEFT JOIN c ON a.id = c.a_id LEFT JOIN b ON a.id = b.a_id
GROUP BY a.id
ORDER BY Ranking DESC
LIMIT 10

如果您不想选择排名,可以将该列的公式直接放入ORDER BY子句中。