Как объединить два запроса, где оба имеют COUNT и группирование без головной боли? - PullRequest
0 голосов
/ 01 апреля 2019

Я пытался объединить результаты двух запросов в одну таблицу, чтобы подсчитать их и отсортировать по часам.

Я пробовал SELECT и UNION ALL, но безуспешно.Я искал все StackOverflow и Google, но работает все время в головных болях.Если я выполняю свой запрос один - все хорошо, и я получаю свой вывод.

Запрос 1:

SELECT COUNT(*) as peopleCount, date_format( timestamp, '%H' ) as hours 
FROM unknownCheckin
WHERE timestamp > '2019-03-01 23' and eid = '222' 
GROUP BY hours 
order by timestamp ASC

Запрос 2:

SELECT COUNT(*) as peopleCount, date_format( timestamp, '%H' ) as hours
FROM checkin 
WHERE timestamp > '2019-03-01 23' and eid = '222' 
GROUP BY hours 
order by timestamp ASC

Мой экспериментбыло:

SELECT COUNT(*) as peopleCount, date_format( timestamp, '%H' ) as hours FROM unknownCheckin
INNER JOIN checkin
ON unknownCheckin.eid = checkin.eid
WHERE timestamp > '2019-03-01 23' and eid = '222' 
GROUP BY hours order by timestamp ASC

1052 - столбец «отметка времени» в списке полей неоднозначен

Ожидаемый результат при выполнении одного запроса1:

--------------------------------------------------
| peopleCount    | hours                         |
--------------------------------------------------
| 4              | 21                            |
--------------------------------------------------
| 1              | 22                            |
--------------------------------------------------
| 1              | 00                            |
--------------------------------------------------

Запрос 2:

--------------------------------------------------
| peopleCount    | hours                         |
--------------------------------------------------
| 10             | 22                            |
--------------------------------------------------
| 22             | 23                            |
--------------------------------------------------
| 12             | 00                            |
--------------------------------------------------
| 5              | 01                            |
--------------------------------------------------

То, что я хочу увидеть, это:

--------------------------------------------------
| peopleCount    | hours                         |
--------------------------------------------------
| 4              | 21                            |
--------------------------------------------------
| 11             | 22                            |
--------------------------------------------------
| 22             | 23                            |
--------------------------------------------------
| 13             | 00                            |
--------------------------------------------------
| 5              | 01                            |
--------------------------------------------------

Извините, у меня нет сил мыслить.Помощь оценена!

Ответы [ 2 ]

1 голос
/ 01 апреля 2019

Возможно, вы хотите использовать союз здесь:

SELECT
    hours,
    COUNT(*) as peopleCount
FROM
(
    SELECT DATE_FORMAT(timestamp, '%H') AS hours
    FROM unknownCheckin
    WHERE timestamp > '2019-03-01 23' AND eid = '222'
    UNION ALL
    SELECT DATE_FORMAT(timestamp, '%H')
    FROM checkin
    WHERE timestamp > '2019-03-01 23' AND eid = '222'
) t
GROUP BY hours
ORDER BY -FIELD(hours, '23', '22');
0 голосов
/ 01 апреля 2019

UNION для 2 запросов, а затем получить сумму людейCount:

select 
  t.hours,
  sum(t.peopleCount) peopleCount
from (
  SELECT COUNT(*) as peopleCount, date_format( timestamp, '%H' ) as hours 
  FROM unknownCheckin
  WHERE timestamp > '2019-03-01 23' and eid = '222' 
  GROUP BY hours 
  union all
  SELECT COUNT(*) as peopleCount, date_format( timestamp, '%H' ) as hours
  FROM checkin 
  WHERE timestamp > '2019-03-01 23' and eid = '222' 
  GROUP BY hours 
) t
group by t.hours
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...