我是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>";
}
}
答案 0 :(得分:5)
您需要SELECT DISTINCT
:
COUNT(*)
基本上,您永远不应该将COUNT()
与聚合函数(例如MIN()
)一起使用。每当您拥有MAX()
,GROUP BY
,execute('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,所以它知道如何计算。