mysql选择distinct行,至少出现(n)次

时间:2017-10-17 20:09:02

标签: php mysql sql innodb

我是SQL的新手,我正在使用MySQL,而且我有一个包含博客的表。在该表中,我有一个名为" blog_category"的列。我试图从blog_category返回至少出现(n)次的DISTINCT值。例如:

    blog_category
    -------------
    category_1
    category_1
    category_2
    category_3
    category_3
    category_4
    category_4
    category_1
    category_1
    category_2
    category_2

我只想返回出现的类别,至少3次(大于或等于3)。

我可以使用DISTINCT关键字显示那些不仅仅出现一次的那些,但我只想要那些实际出现超过指定次数的那些,在这种情况下只是出现的次数超过3次。

所以在这种情况下我只想返回" category_1"和" category_2"。

我尝试了很多方法,但似乎没有任何工作,我不断收到以下错误:

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean
given in [FILE NAME OMITTED] on line 101 

以下是我尝试过的一些事情:

$query = "SELECT DISTINCT blog_category 
          FROM blog_posts 
          HAVING COUNT (blog_category) >= 3";

$query = "SELECT DISTINCT blog_category 
          FROM blog_posts 
          WHERE blog_category IN
          (SELECT blog_category
          HAVING (COUNT (blog_category) >= 3))";

$query = "SELECT DISTINCT blog_category 
          FROM blog_posts 
          WHERE blog_category 
          HAVING COUNT(blog_category) >= 3";

$query = "SELECT DISTINCT blog_category 
          FROM blog_posts 
          WHERE COUNT(blog_category) >= 3";

以下是其他用户的建议答案,我已经尝试过并且没有运气......

$query = "SELECT blog_category 
          FROM blog_posts 
          GROUP BY blog_category
          HAVING COUNT(*) >= 3";

这里是RAN代码的完整部分(我在服务器的SQL测试部分直接测试,它运行得很好,但是当我运行实际的完整代码时,它会一直返回,查询是错误的):

$query = "SELECT blog_category 
        FROM blog_posts
        GROUP BY blog_category
        HAVING COUNT(*) > 2)";

        $result = mysqli_query( $conn, $query );

        if( mysqli_num_rows( $result ) > 0 ) {
            while( $row = mysqli_fetch_assoc($result) ) {
                echo "<ul>";
                echo "<li>" . $row['blog_category'] . "</p>";
                echo "</ul>";           
            }
        }

3 个答案:

答案 0 :(得分:5)

您需要SELECT DISTINCT

COUNT(*)

基本上,您永远不应该将COUNT()与聚合函数(例如MIN())一起使用。每当您拥有MAX()GROUP BYexecute('INSERT INTO [B2017].[dbo].[Audit] (' + @columnNames + ') VALUES('''')') 等功能时,您应该拥有$(document).ready(function() { $(".menu-trigger").click(function() { $(".navigation").slideToggle(400, function() { $(window).resize(function() { windowsize = $(window).width(); if (windowsize >= 1025) { $(".navigation").css("display", "block"); } else $(".navigation").css("display", "none"); }); }); }); $(".navigation>ul>li").click(function(){ $(".navigation").css("display", "none"); }) });或者期望结果集中只有一行。< / p>

不可否认,也有例外。在某些数据库中,您可以使用不具有聚合等价物的分析函数来执行此操作。这不适用于MySQL。

答案 1 :(得分:1)

您对having子句有正确的想法,但是您缺少group by子句来应用每个组的计数(即每个不同的blog_category值):

SELECT   blog_category 
FROM     blog_posts 
GROUP BY blog_category
HAVING   COUNT(*) >= 3

答案 2 :(得分:0)

像这样:

SELECT blog_category 
FROM blog_posts
GROUP BY blog_category
HAVING COUNT (blog_category) >= 3

你已经到了GROUP BY,所以它知道如何计算。