在MySQL中加入两个子查询

时间:2015-10-22 10:22:21

标签: mysql sql join

我有两个MySQL子查询,它们本身工作正常,但是当我将它们连接在一起时,第二列给出的值不正确。

有问题的两个查询只显示了一匹马在当前比赛之前参加比赛的总次数,以及这匹马在今天之前赢得的次数总和。

我尝试了各种类型的连接并使用不同的ID进行连接,但是我找不到正确的组合。

输出有效地显示了比赛结果的种族。

查询A - 总比赛

while ((line = br.readLine()) != null) {

   // use comma as separator
   String[] fields = line.split(",");

   for(String field : fields) {
      System.out.print(field);
   }
   System.out.println();
}

查询B - 胜利总和

SELECT
  date,
  raceref,
  horse,
  win,

  (
    SELECT ifnull(count(raceref),0) as totalraces
    FROM results
    WHERE horse = t.horse
      AND date < t.date
    ORDER BY date DESC

  ) AS totalraces_prior

FROM results t
group by horse, raceref
order by raceref asc;

我会喜欢一双清新的眼睛。

这是一个显示我加入的SQL小提琴。

http://www.sqlfiddle.com/#!2/87c54da/1

只是为了更仔细地研究这个问题,当我加入两个查询时,就是'totalwins'列不断给出不正确的值。或者实际上,无论我添加哪一列,都会出现错误的值。

数据库很大,而且SQL Fiddle无法处理任何太大的数据,所以这里是一个图像,因为它在SQL Fiddle中并不是很明显。

http://tinypic.com/r/o0x7i8/8

谢谢你们。

1 个答案:

答案 0 :(得分:0)

select date, raceref, horse, win, totalraces, totalwins, (totalwins / totalraces) as winPercentage
from (
select date, raceref, horse, win, 
  (
    SELECT ifnull(count(raceref),0)
    FROM results
    WHERE horse = t.horse
      AND date < t.date
    ORDER BY date DESC

  ) AS totalraces,
   (
    SELECT ifnull(sum(win),0)
    FROM results
    WHERE horse = t.horse
      AND date < t.date
    ORDER BY date DESC

  ) AS totalwins

FROM results t
group by horse, raceref
order by raceref asc
) t
;