Mysql 2 выберите позиции со значением из оператора 1, использованного в утверждении 2 - PullRequest
0 голосов
/ 21 апреля 2020

Как объединить их в одном sql утверждении? У меня есть эти 2 простые таблицы.

3_Referee_Matches
+------------------------------------+
| ID | CountryCode | RefereeUrlCode  |
| 1  |    eng      | mike-jean       |
| 2  |    eng      | mike-jean       |
| 3  |    eng      | mike-jean       |
| 4  |    eng      | mike-jean       |
| 5  |    spa      | hulo-pape       |
| 6  |    ita      | enri-tolsi      |
| 7  |    ita      | enra-ean        |
| 8  |    ita      | enra-ean        |
+------------------------------------+


3_Players
+----------------------------------------------------+
| ID | MatchID |     Name   | PlayerUrlCode | Yellow |
| 1  |    1    | Mike Bell  | mike-bell     |    1   |
| 2  |    2    | Mike Bell  | mike-bell     |    1   |
| 3  |    3    | Thoms Tim  | thoms-tim     |    1   |
| 4  |    4    | Jean Claod | jean-claod    |    0   |
| 5  |    33   | Thoms Tim  | thoms-tim     |    1   |
| 6  |    44   | Fis Most   | fis-most      |    0   |
| 7  |    54   | Geni Toens | geni-toens    |    1   |
| 8  |    67   | Geni Toens | geni-toens    |    1   |
+----------------------------------------------------+

Сегодня я использую эти 2 выбора. Но нужна помощь, чтобы объединить их в одно.

выберите 1:

SELECT rm.*, p.PlayerUrlCode AS VALUEtoBEusedAGAIN, COUNT(p.ID) AS YellowCounter 
FROM 3_Referee_Matches rm
JOIN 3_Players p ON rm.ID = p.MatchID
WHERE rm.CountryCode = 'eng' AND rm.RefereeUrlCode = 'mike-jean'
AND p.Yellow>0 
GROUP BY p.Name

выберите 2:

SELECT COUNT(rm.ID) AS Counter 
FROM 3_Referee_Matches rm 
JOIN 3_Players p ON rm.ID = p.MatchID
WHERE rm.RefereeUrlCode='mike-jean'
AND p.PlayerUrlCode='VALUEtoBEusedAGAIN'

Результат должен быть таким:

+--------------------------------------+
| Name       | YellowCounter | Counter |
| Mike Bell  |      2        |    2    |
| Jean Claod |      1        |    1    |   
+--------------------------------------+

Показано, что Майк Белл получил 2 желтых карточки в 2 матчах.

1 Ответ

0 голосов
/ 21 апреля 2020

Ваш первый запрос уже почти готов. Сначала удалите посторонние столбцы из предложения select. count количество "игроков" (на самом деле информация об игроке для каждого матча) и sum их желтые карточки.

select
  p.name,
  sum(yellow) as YellowCounter,
  count(p.id) as Counter
from 3_Referee_Matches rm
join 3_Players p on rm.ID = p.MatchID
where rm.CountryCode = 'eng'
  and rm.RefereeUrlCode = 'mike-jean'
group by p.name;

+------------+---------------+---------+
| name       | YellowCounter | Counter |
+------------+---------------+---------+
| Mike Bell  |             2 |       2 |
| Thoms Tim  |             1 |       1 |
| Jean Claod |             0 |       1 |
+------------+---------------+---------+

Я полагаю, что в этом примере Томс и Джин поменялись местами.

...