mysql - 一张表中两个表的信息

标签 mysql sql

我有这两张 table ,它们的布局如下......

表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']; }

这会给我年龄,然后是选秀权和获胜者的数量,但我想做的是在此之后我想包括那些属于该因素的 RCNum。

例如 3yo 会输出..

(3岁) 1-5 (1 3 4 5)
(4岁)2-4(2)

我的技能很基础,所以我不知道如何实现这一目标,所以任何帮助将不胜感激!谢谢您提前!

编辑

我目前正在使用...如下建议

SELECT t1.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
  RIGHT
  JOIN table1 t1
    ON t1.age= t2.age
 GROUP 
    BY t1.age;

这给了我这个......

+-----------+-----------+----------+---------------------------+
|   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                     |
+-----------+-----------+----------+---------------------------+

但是,对于插入到 rcnums 列中的每个数字,它都会在“选秀/获胜”列中再次添加统计信息!

在“选择/胜利”列中,我只想在表 1 中进行计数,这样 3yo 就是 60 和 2,而不是 420 和 14。我将如何更改编码来实现此目的?

最佳答案

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;

关于mysql - 一张表中两个表的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25531826/

相关文章:

c# - Where 子句中有两个条件求和的 SQL 语句错误

sql - 插入选择继续错误

mysql - 如何计算具有空白值或 0 值的列数

sql - mysql统计所选字段的个数

PHP 从数据库中获取唯一的随机值

MySQL队列查询结果结构

php - 无法在 MySQL 的日期字段中插入 NULL

php - 数据库没有收到正确的数据

mysql - `Exists` 和 `IN` 在 MySQL 中给出两个不同的结果

phpmyadmin 触发器