MySQL запрос с объединением и группировкой по - PullRequest
0 голосов
/ 04 июля 2018

Я работаю над своим проектом, используя базу данных mysql, но когда я пытаюсь получить информацию из таблиц буксировки, используя левые операторы соединения, данные из первых таблиц не могут отображаться и отображать нулевое значение, даже если в таблице много данных , это мой запрос

SELECT
   hotspots.name,
   count(distinct(UserName)) as users,
   count(radacctid),
   avg(AcctSessionTime)as Avg,
   sum(AcctSessionTime) as allacctsession 
FROM
   radacct 
   left JOIN
      hotspots 
      ON (radacct.mac_address LIKE hotspots.mac) 
GROUP BY
   hotspots.name;

это результат

+------+-------+------------------+-----------+----------------+
| name | users | count(radacctid) | Avg       | allacctsession |
+------+-------+------------------+-----------+----------------+
| NULL |     7 |               31 | 7433.6774 |         230444 |
+------+-------+------------------+-----------+----------------+

значение имени имеет значение в таблице горячих точек, но не отображается , и когда я делаю этот запрос как правый, он отображает столбец имени и отображает ноль для других столбцов

1 Ответ

0 голосов
/ 04 июля 2018

Существуют учетные записи, для которых нет связанной точки доступа. 31 из них, чтобы быть точным. Так как таблица hotspots находится справа от объединения, она будет NULL, если нет соответствующего MAC-адреса. Ваш запрос группирует пустые единицы и вычисляет агрегаты, которые вы видите.

Возможно, вы хотели иметь hotspots в левой части объединения?

SELECT hotspots.name,
       count(distinct(UserName)) as users,
       count(radacctid),
       avg(AcctSessionTime)as Avg,
       sum(AcctSessionTime) as allacctsession
FROM hotspots left JOIN radacct ON
    (radacct.mac_address LIKE hotspots.mac)
GROUP BY hotspots.name;
...