在SQL查询中使用DISTINCT关键字进行计数

3
我有一个页面展示了所有公司的名称(确切地说是45个)。
数据库表目前有43,815条记录,因此我只想显示没有重复项的企业名称(这就是为什么我在选择时使用DISTINCT),但我也想计算每个公司的结果数量并将它们显式出来。
我尝试使用count() as,但它会删除所有企业结果,只显示总数(43,815)。
我的问题是如何使用DISTINCT来显示公司(因为我不想在页面上有重复项),然后同时打印出每个公司的总结果?
感谢您的帮助!
$servername = "localhost";
$username = "";
$password = "";
$dbname = "";

// Connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "SELECT DISTINCT company FROM ads ORDER BY company ASC";

$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {

       // Display the company name
       echo $row["company"];

       // I WOULD LIKE TO ECHO OUT HERE THE TOTAL OF EACH COMPANY HAS (COUNT) IN RESULTS!

    }
} else {
    echo "0 results";
  }
$conn->close();
?>
3个回答

3

尝试:

SELECT
    company,
    COUNT(company)
FROM
    ads
GROUP BY
    company
ORDER BY
    company

3

我认为你应该尝试使用GROUP BY子句。

如果不知道你的表结构,可以尝试以下操作:

$query = "SELECT 

  count(company) as count 

FROM ads 

GROUP BY company 

ORDER BY company ASC"

工作了!非常感谢你! - code
很高兴它对你有用!希望你的项目其余部分顺利!~干杯 - Joseph_J

1

在您的SELECT查询中使用GROUP BY,这应该可以实现您想要的功能,这将把所有相同公司的分组在一起并进行计数。

"SELECT COUNT(company) FROM ads GROUP BY company ORDER BY company ASC"


2
当使用COUNT()函数与GROUP BY一起使用时,DISTINCT是否是多余的? - Joseph_J
1
谢谢@Marius!这让我朝着正确的方向前进了。 - code
很高兴能够帮助! - Marius Brits
1
嗨,Joseph,在这种情况下,是的,你是正确的,因为我们只选择一个值,但在多个值的情况下可能不是这样,所以DISTINCT会有帮助。感谢你指出这一点。 - Marius Brits

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接