带join和group by的mysql查询

xtupzzrd  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(400)

我使用mysql数据库处理我的项目,但是当我试图使用left join语句从两个表中检索信息时,第一个表中的数据无法显示,并且即使该表有许多数据,也显示空值。这是我的问题

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

名称值在热点表中有值,但未显示。当我将此查询作为right join进行查询时,它显示name列,并为其他列显示null

hi3rlvi2

hi3rlvi21#

存在没有关联热点的帐户。准确地说是31个。自从 hotspots 表位于联接的右侧,当没有匹配的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;

相关问题