mysql select 不同的行,至少出现 (n) 次
mysql select distinct row, that appears at least (n) times
我是 SQL 的新手,我正在使用 MySQL,并且我有一个包含博客的 table。在那个 table 中,我有一个名为 "blog_category" 的列。我正在尝试 return 来自至少出现 (n) 次的 blog_category 的 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
我只想return出现的类别say,至少出现3次(大于等于3次)。
我可以使用 DISTINCT 关键字让它显示出现不止一次的那些,但我只想要实际出现超过指定次数的那些,在这种情况下只是出现在至少 3 次。
所以在这种情况下我只想 return "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";
这里是完整的代码部分 运行(我直接在服务器的 SQL 测试部分进行了测试,它工作得很好,但是当我 运行 实际它保持 return 查询为假的完整代码):
$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>";
}
}
你需要GROUP BY
:
SELECT blog_category
FROM blog_posts
GROUP BY blog_category
HAVING COUNT(*) >= 3;
基本上,您不应该将 SELECT DISTINCT
与聚合函数(例如 COUNT(*)
)一起使用。每当您有 COUNT()
、MIN()
、MAX()
等函数时,您应该有一个 GROUP BY
或期望结果集中只有一行。
诚然,也有例外。在某些数据库中,您可能会使用没有聚合等价物的分析函数来执行此操作。这不适用于 MySQL.
您对 having
子句的想法是正确的,但是您缺少 group by
子句来应用每组计数(即,blog_category
的每个不同值):
SELECT blog_category
FROM blog_posts
GROUP BY blog_category
HAVING COUNT(*) >= 3
像这样:
SELECT blog_category
FROM blog_posts
GROUP BY blog_category
HAVING COUNT (blog_category) >= 3
您必须使用 GROUP BY 才能知道如何计数。
我是 SQL 的新手,我正在使用 MySQL,并且我有一个包含博客的 table。在那个 table 中,我有一个名为 "blog_category" 的列。我正在尝试 return 来自至少出现 (n) 次的 blog_category 的 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
我只想return出现的类别say,至少出现3次(大于等于3次)。
我可以使用 DISTINCT 关键字让它显示出现不止一次的那些,但我只想要实际出现超过指定次数的那些,在这种情况下只是出现在至少 3 次。
所以在这种情况下我只想 return "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";
这里是完整的代码部分 运行(我直接在服务器的 SQL 测试部分进行了测试,它工作得很好,但是当我 运行 实际它保持 return 查询为假的完整代码):
$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>";
}
}
你需要GROUP BY
:
SELECT blog_category
FROM blog_posts
GROUP BY blog_category
HAVING COUNT(*) >= 3;
基本上,您不应该将 SELECT DISTINCT
与聚合函数(例如 COUNT(*)
)一起使用。每当您有 COUNT()
、MIN()
、MAX()
等函数时,您应该有一个 GROUP BY
或期望结果集中只有一行。
诚然,也有例外。在某些数据库中,您可能会使用没有聚合等价物的分析函数来执行此操作。这不适用于 MySQL.
您对 having
子句的想法是正确的,但是您缺少 group by
子句来应用每组计数(即,blog_category
的每个不同值):
SELECT blog_category
FROM blog_posts
GROUP BY blog_category
HAVING COUNT(*) >= 3
像这样:
SELECT blog_category
FROM blog_posts
GROUP BY blog_category
HAVING COUNT (blog_category) >= 3
您必须使用 GROUP BY 才能知道如何计数。