mysql统计A表中的字段在B表中出现的次数
时间: 2024-05-02 22:16:32 浏览: 154
可以使用以下 SQL 语句实现:
```sql
SELECT A.field, COUNT(*) AS count
FROM A
INNER JOIN B ON A.field = B.field
GROUP BY A.field
```
其中,`A` 和 `B` 分别是两个表的表名,`field` 是需要统计的字段。`INNER JOIN` 用于连接两个表,并将它们中相同的 `field` 列进行匹配。`GROUP BY` 用于按照 `A.field` 进行分组,`COUNT(*)` 统计每个分组中的行数,即 `A.field` 在 `B` 表中出现的次数。最终结果为每个 `A.field` 对应的出现次数。
相关问题
要在MySQL中查询alarm表, 查询表12个月的数据统计, 统计数据类型是alarm_status='untreated' 个数, 月份中没有alarm_status数据, 就显示月份和数据为0
在MySQL中,如果你想查询`alarm`表在过去12个月内`alarm_status`为'untreated'的状态次数,同时在没有对应数据的月份显示0,可以使用CASE语句、SUM函数以及LEFT JOIN操作。假设`alarm`表有`date`和`alarm_status`两个字段,示例SQL如下:
```sql
SELECT
a.month,
COALESCE(SUM(CASE WHEN a.alarm_status = 'untreated' THEN 1 ELSE 0 END), 0) AS untreated_count
FROM
(SELECT
DATE_FORMAT(date, '%Y-%m') AS month
FROM
alarm
WHERE
date >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR)
GROUP BY
month) a
LEFT JOIN
alarm b ON a.month = DATE_FORMAT(b.date, '%Y-%m')
GROUP BY
a.month
ORDER BY
a.month;
```
在这个查询中,首先创建了一个子查询a来提取所有过去的12个月份。然后通过LEFT JOIN将`alarm`表自身连接,以便检查每个月是否有'treated'状态的数据。如果有的话,COUNT(*)会被加一;如果没有,则CASE语句返回0。COALESCE函数用于在结果为NULL(即无数据)时返回0。
阅读全文