Mysql 一个表中两个表的信息
我有这两张桌子,它们是这样布置的 表1Mysql 一个表中两个表的信息,mysql,sql,Mysql,Sql,我有这两张桌子,它们是这样布置的 表1 +------+----------+-----+--------+ | Year | Runner | Age | Result | +------+----------+-----+--------+ | 2004 | Runner 1 | 3 | Won | | 2004 | Runner 2 | 4 | Lost | | 2004 | Runner 3 | 3 | Lost | | 2005 | Runner 1 |
+------+----------+-----+--------+
| Year | Runner | Age | Result |
+------+----------+-----+--------+
| 2004 | Runner 1 | 3 | Won |
| 2004 | Runner 2 | 4 | Lost |
| 2004 | Runner 3 | 3 | Lost |
| 2005 | Runner 1 | 3 | Lost |
| 2005 | Runner 2 | 3 | Lost |
| 2005 | Runner 3 | 4 | Won |
| 2006 | Runner 1 | 4 | Won |
| 2006 | Runner 2 | 3 | Lost |
| 2006 | Runner 3 | 4 | Lost |
+------+----------+-----+--------+
表2+-------+----------+-----+
| RCNum | Runner | Age |
+-------+----------+-----+
| 1 | Runner 1 | 3 |
| 2 | Runner 2 | 4 |
| 3 | Runner 3 | 3 |
| 4 | Runner 4 | 3 |
| 5 | Runner 5 | 3 |
+-------+----------+-----+
现在我将使用
$numbers = mysql_query("SELECT age,
sum(case when result <> ''then 1 else 0 end) Sec1Picks,
sum(case when result = 'Won' then 1 else 0 end) Sec1Wins
FROM table1
GROUP BY age
ORDER BY age ASC");
while($row = mysql_fetch_array($numbers, MYSQL_ASSOC)) {
echo "(".$row['Age']."yo) ".$row['Sec1Wins']."-".$row['Sec1Picks']; }
但是,对于插入到rcnums列中的每个数字,它将在Picks/Wins列中再次添加统计信息
在Picks/Wins列中,我只想在表1中计算3yo是60和2,而不是420和14。如何更改编码以实现此目的?选择t2.age
SELECT t2.age
, SUM(CASE WHEN t1.result <> '' THEN 1 ELSE 0 END) Sec1Picks
, SUM(CASE WHEN t1.result = 'Won' THEN 1 ELSE 0 END) Sec1Wins
, GROUP_CONCAT(DISTINCT t2.rcnum ORDER BY rcnum SEPARATOR ' ') rcnums
FROM table2 t2
LEFT
JOIN table1 t1
ON t1.runner = t2.runner
GROUP
BY t2.age;
,求和(t1.result“”时为1,其他0结束时为1)秒1分
,SUM(当t1.result='Won'然后1或0结束时的情况)Sec1Wins
,组_CONCAT(按rcnum分隔符“”的不同t2.rcnum顺序)rcnums
来自表2 t2
左边
加入表1 t1
在t1.runner=t2.runner上
团体
t2.5岁;
很抱歉,这些表在不同的数据库中吗?标题是这样说的,但在你的问题中没有明确说明。对于不同的数据库,我假设不同的数据库instances@Leo我想OP的意思是“桌子”是的,对不起,我的意思是,两张桌子合二为一。我注意到有些东西现在不太适合它!假设我正在查看3yo跑步者的数据,数据为1-5。。对于每个RCNum,这是重复的,所以如果RCNum列中有4个,那么这个数字将更改为4-20,而我希望它保持为1-5,不管怎样,修复这个问题?
+-----------+-----------+----------+---------------------------+
| age | Sec1Picks | Sec1Wins | rcnums |
+-----------+-----------+----------+---------------------------+
| 3 | 420 | 14 | 8 9 13 21 22 25 27 |
| 4 | 352 | 24 | 6 7 11 16 17 19 20 29 |
| 5 | 470 | 10 | 1 2 3 5 10 15 18 23 24 26 |
| 6 | 64 | 6 | 12 14 |
| 7 | 25 | 1 | 4 |
| 8 | 7 | 0 | NULL |
| 9 | 2 | 0 | 28 30 |
+-----------+-----------+----------+---------------------------+
SELECT t2.age
, SUM(CASE WHEN t1.result <> '' THEN 1 ELSE 0 END) Sec1Picks
, SUM(CASE WHEN t1.result = 'Won' THEN 1 ELSE 0 END) Sec1Wins
, GROUP_CONCAT(DISTINCT t2.rcnum ORDER BY rcnum SEPARATOR ' ') rcnums
FROM table2 t2
LEFT
JOIN table1 t1
ON t1.runner = t2.runner
GROUP
BY t2.age;