首页 > 解决方案 > 带有连接和分组依据的mysql查询

问题描述

我使用 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 |
+------+-------+------------------+-----------+----------------+

名称值在热点表中有值但未显示。当我将此查询作为右连接时,它显示名称列并为其他列显示 null

标签: mysqlleft-join

解决方案


有些帐户没有关联的热点。准确地说是31个。由于该hotspots表位于连接的右侧,因此当没有匹配的 MAC 地址时它将为 NULL。您的查询将 NULL 分组在一起并计算您看到的聚合。

也许你的意思是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;

推荐阅读