簡體   English   中英

從兩個表中提取的嵌套SQL語句

[英]Nested SQL statements pulling from two tables

我試圖嵌套在SQL語句中,這些語句試圖從兩個表中提取數據,對player_id的行,1st_assist和2nd_assist的行進行計數,並相應地顯示在3列中。

這是我的代碼。

SELECT 

     last_name, 

     (SELECT COUNT (*) FROM goals WHERE player_id = 4 OR player_id = 5) 
     AS player_goals, 

     (SELECT COUNT (*) FROM goals WHERE 1st_assist = 4 OR 1st_assist = 5) 
     AS 1st_assists, 

     (SELECT COUNT (*) FROM goals WHERE 2nd_assist = 4 OR 2nd_assist = 5)
     AS 2nd_assists 

FROM people 

WHERE player_id = 4 OR player_id = 5 

GROUP BY player_id

試試看:

SELECT 
    p.last_name,
    COUNT(DISTINCT g.id) AS player_goals,
    COUNT(DISTINCT a1.id) AS 1st_assists,
    COUNT(DISTINCT a2.id) AS 2nd_assists
FROM
    people p
    LEFT JOIN goals g ON (g.player_id = p.player_id)
    LEFT JOIN goals a1 ON (a1.1st_assist = p.player_id)
    LEFT JOIN goals a2 ON (a2.2nd_assist = p.player_id)
WHERE
    p.player_id = 4 OR p.player_id = 5
GROUP BY p.player_id


經過測試:

mysql> select * from people;
+-----------+-----------+------------+
| player_id | last_name | first_name |
+-----------+-----------+------------+
|         4 | Francis   | Jeff       |
|         5 | Doe       | John       |
|         6 | Barratt   | Glen       |
+-----------+-----------+------------+
3 rows in set (0.00 sec)

mysql> select * from goals;
+----+-----------+------------+------------+---------------------+
| id | player_id | 1st_assist | 2nd_assist | when_made           |
+----+-----------+------------+------------+---------------------+
|  1 |         4 |          6 |          5 | 2011-11-07 15:05:31 |
|  2 |         4 |          5 |       NULL | 2011-11-07 15:05:37 |
|  3 |         5 |          4 |          6 | 2011-11-07 15:05:45 |
|  4 |         6 |          4 |          5 | 2011-11-07 15:05:52 |
|  5 |         4 |          6 |       NULL | 2011-11-07 15:06:05 |
|  6 |         5 |       NULL |       NULL | 2011-11-07 15:06:15 |
|  7 |         6 |          4 |       NULL | 2011-11-07 15:06:21 |
|  8 |         5 |          6 |       NULL | 2011-11-07 15:06:31 |
|  9 |         4 |       NULL |       NULL | 2011-11-07 15:15:21 |
| 10 |         4 |          6 |       NULL | 2011-11-07 15:15:27 |
| 11 |         6 |          5 |          4 | 2011-11-07 15:15:38 |
+----+-----------+------------+------------+---------------------+
11 rows in set (0.00 sec)

mysql> SELECT p.last_name, COUNT(DISTINCT g.id) AS player_goals, COUNT(DISTINCT a1.id) AS 1st_assists, COUNT(DISTINCT a2.id) AS 2nd_assists FROM people p LEFT JOIN goals g ON (g.player_id = p.player_id) LEFT JOIN goals a1 ON (a1.1st_assist = p.player_id) LEFT JOIN goals a2 ON (a2.2nd_assist = p.player_id) WHERE p.player_id = 4 OR p.player_id = 5 GROUP BY p.player_id;
+-----------+--------------+-------------+-------------+
| last_name | player_goals | 1st_assists | 2nd_assists |
+-----------+--------------+-------------+-------------+
| Francis   |            5 |           3 |           1 |
| Doe       |            3 |           2 |           2 |
+-----------+--------------+-------------+-------------+
2 rows in set (0.00 sec)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM