mysql - 在查询中合并 COUNT

标签 mysql

如何使用 COUNT 获取与 LIKE 查询匹配的所有记录的计数?

我有一个表 keywords 定义为

+------+-------+-----------------+
| id   | photo | keyword         |
+------+-------+-----------------+
| 3504 |   664 | 2013            |
| 3505 |   664 | bl elfring      |
| 3506 |   664 | indoor track    |
| 3507 |   664 | people          |
| 3508 |   664 | 1-5_it_0128.jpg |
+------+-------+-----------------+

photo部分定义为

+-----+-------------------+-------------+--------------+------------+
| ID  | name              | photo_width | photo_height | date_taken |
+-----+-------------------+-------------+--------------+------------+
| 760 | 12-8_mbb_0072.jpg |         425 |          600 | 2012-12-08 |
| 759 | 12-8_mbb_0071.jpg |         459 |          600 | 2012-12-08 |
| 758 | 12-8_mbb_0069.jpg |         457 |          600 | 2012-12-08 |
| 757 | 12-8_mbb_0057.jpg |         395 |          600 | 2012-12-08 |
| 756 | 12-8_mbb_0050.jpg |         800 |          468 | 2012-12-08 |
+-----+-------------------+-------------+--------------+------------+

keywords.photo 引用 photos.ID 并且 keywords.keyword 是与该图像关联的 IPTC 关键字。

我想统计与特定关键字相关联的所有图像

到目前为止,

SELECT COUNT(keywords.photo) AS keyword_count, keywords.keyword 
FROM keywords INNER JOIN photos ON keywords.photo = photos.ID
WHERE keywords.keyword LIKE '%nic%'

返回

+---------------+-------------+
| keyword_count | keyword     |
+---------------+-------------+
|            31 | nicole **** |
+---------------+-------------+

但是,

SELECT DISTINCT keyword
FROM keywords
WHERE keyword LIKE '%nic%'

返回

+----------------+
| keyword        |
+----------------+
| nicole ****    |
| nicole ******* |
| bonny **nic*   |
| nicole ******  |
+----------------+

如何获得包含第二个查询结果的计数字段?

最佳答案

如果我没理解错的话,您想要与给定关键字相匹配的照片数量?如果是这种情况,您可以使用 GROUP BY子句:

SELECT
    COUNT(keywords.photo) AS keyword_count, keywords.keyword 
FROM
    keywords INNER JOIN photos ON keywords.photo = photos.ID
WHERE
    keywords.keyword LIKE '%nic%'
GROUP BY
    keywords.keyword

这将按 keywords.keyword 列对结果进行分组,每个结果的总使用次数。请注意,以这种方式匹配/分组的“关键字”是唯一的 - 它不会按部分匹配分组(即 “bonny **nic* 不同于 nicole **** **).

关于mysql - 在查询中合并 COUNT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14221262/

相关文章:

java - 返回一个结果集

database - 根据多个 AND WHERE 条件检索多条记录

php - MYSQLi bind_result 分配太多内存

java - 延迟初始化异常 : load lazy attribute from a session different from the original one in Hibernate

php - PHP 表中的总和列

mysql - 从查询的第二个表中过滤最大日期

PHP MYSQL 无法连接 (HY000/2002)

php - MySQL id 按适当的系列

php - 如何以这种方式构造 mysql 结果?

javascript - 如何创建单词选择器以从文本中选择并突出显示和删除选定的单词?