使用group by时如何计算列中的行数

Posted

技术标签:

【中文标题】使用group by时如何计算列中的行数【英文标题】:how to count rows from a column while using group by 【发布时间】:2014-07-22 09:27:43 【问题描述】:

我陷入了计数问题。谁能看看我下面的代码并告诉我如何从第一个while循环开始计数,即$query。这是分组的两列,我只想添加另一个列名,而不分组仅计算行数。喜欢

"SELECT CountryCode,NetID,COUNT(OpCode) as count FROM activecon WHERE OpCode='$thisActiveOp' GROUP BY CountryCode,NetID"

我尝试了上述方法,但我不知道如何使用底部代码来回显这个 COUNT(OpCode),我在底部代码中使用 $countryValue 和 $networkValue 来回显我的表格行。

$query=mysql_query("SELECT CountryCode,NetID FROM activecon WHERE OpCode='$thisActiveOp' GROUP BY CountryCode,NetID") or die(mysql_error());

while($row = mysql_fetch_array($query)) 
    echo "<tr><td>$thisActiveOp</td>";

    $networkID = $row['NetID'];
    $countryID = $row['CountryCode'];


    $query2=mysql_query("SELECT countryName,networkName FROM connection_details WHERE countryId='$countryID' AND netId='$networkID'") or die(mysql_error());
    while($row2 = mysql_fetch_array($query2)) 
        $countryValue = $row2['countryName'];
        $networkValue = $row2['networkName'];
    
echo "<td>$countryValue</td><td>$networkValue</td></tr>";


【问题讨论】:

要回显它,请使用别名(您已使用 as count 为列指定别名 count 你为什么不能只使用你的第一个 SQL 的 sn-p,然后写一些类似 $count = $row['count']; 的东西? 【参考方案1】:

我认为您建议的代码应该可以工作,所以它将是:

$query=mysql_query("SELECT CountryCode,NetID,COUNT(OpCode) as code FROM activecon WHERE OpCode='$thisActiveOp' GROUP BY CountryCode,NetID") or die(mysql_error());

while($row = mysql_fetch_array($query)) 
    echo "<tr><td>$thisActiveOp</td>";

    $networkID = $row['NetID'];
    $countryID = $row['CountryCode'];
    $code      = $row['code'];


    $query2=mysql_query("SELECT countryName,networkName FROM connection_details WHERE countryId='$countryID' AND netId='$networkID'") or die(mysql_error());
    while($row2 = mysql_fetch_array($query2)) 
        $countryValue = $row2['countryName'];
        $networkValue = $row2['networkName'];
    
    echo "<td>$countryValue</td><td>$networkValue</td><td>$code</td></tr>";

【讨论】:

【参考方案2】:

您可以使用别名从mysql返回的数组中访问计数。

但是,根据您的数据的详细信息,您的脚本/sql 可能会简化为此(即假设 activecon 上的每条记录在 connection_details 上只有 1 条记录):-

<?php
$query=mysql_query("SELECT b.countryName, b.networkName, COUNT(a.OpCode) AS `count`
                    FROM activecon a
                    INNER JOIN connection_details b
                    ON a.CountryCode = b.countryId AND a.NetID = b.netId
                    WHERE a.OpCode='".mysq_real_escape_string($thisActiveOp)."' 
                    GROUP BY b.countryName, b.networkName") or die(mysql_error());

while($row = mysql_fetch_array($query)) 

    echo "<tr><td>$thisActiveOp</td><td>".$row['countryName']."</td><td>".$row['networkName']."</td><td>".$row['count']."</td></tr>";

【讨论】:

以上是关于使用group by时如何计算列中的行数的主要内容,如果未能解决你的问题,请参考以下文章

如何计算包含一组列中的值和 Pandas 数据框中另一列中的另一个值的行数?

如何仅对选定的行数使用 group by?

如何计算 MySQL 表中的行数(PHP PDO)

如何创建一个计算数据框列中 ID 频率的列?

Power Query - 在组函数中计算列中的非空白

计算其中的行数以找到特定值的行数[重复]