如何在SQL中的两个表中计数相同的值

时间:2018-12-06 00:33:05

标签: mysql sql mysqli

我有一个名为hasil的表和一个名为actual的表。如何编写SQL查询以达到下表中的预期结果?

awfe]

3 个答案:

答案 0 :(得分:0)

假设Hasil(id_data,标签),Actual(id_data,标签)并假设您要使用INNER JOIN(即:仅传递到两个表中具有共同ID的聚合行):

SELECT h_label, a_label, COUNT(*) as cnt FROM (
    SELECT h.label as h_label, a.label as a_label
    FROM hasil h, actual a 
    WHERE h.id_data = a.id_data) b 
GROUP BY h_label, a_label

在查询的内部子选择中,使用两个表中的id_data键将两个表连接起来以获取此信息:

Id_data, hasil_label, actual_label
1, Yes, Yes
2, No, Yes
3, No, No
4, Yes, No
5, No, Yes

在查询的外部,您将获得上述结果并使用聚合函数COUNT与hasil_label和actual_label进行聚合(GROUP BY),该函数将计算hasil_label和actual_label的这种组合发生多少次。 / p>

这将导致:

hasil_label, actual_label, count
Yes, Yes, 1
No, Yes, 2
No, No, 1
Yes, No, 1

答案 1 :(得分:0)

您可以这样做:

准备数据

create table hasil (id int, label varchar(10));
create table actual (id int, label varchar(10));
insert into hasil values (1,'Yes'), (2,'No'), (3,'No'), (4,'Yes'), (5,'No');
insert into actual values (1,'Yes'), (2,'Yes'), (3,'No'), (4,'No'), (5,'Yes');

查询

select hasil, actual, count(*)
from 
(
    select hasil.id, hasil.label as hasil, actual.label as actual
    from hasil
    inner join actual on hasil.id = actual.id
    order by 1
) x
group by hasil, actual
order by 1 desc, 2 desc;

结果

+-------+--------+----------+
| hasil | actual | count(*) |
+-------+--------+----------+
| Yes   | Yes    |        1 |
| Yes   | No     |        1 |
| No    | Yes    |        2 |
| No    | No     |        1 |
+-------+--------+----------+

说明

首先,按ID将两个表中的数据合并为它们之间的公共列。

select hasil.id, hasil.label as hasil, actual.label as actual
from hasil
inner join actual on hasil.id = actual.id
order by 1;

那会给你:

+------+-------+--------+
| id   | hasil | actual |
+------+-------+--------+
|    1 | Yes   | Yes    |
|    2 | No    | Yes    |
|    3 | No    | No     |
|    4 | Yes   | No     |
|    5 | No    | Yes    |
+------+-------+--------+

然后,找到您拥有多少hasil + actual的独特组合,然后根据喜好对数据进行排序。

答案 2 :(得分:0)

这应该有效。

SELECT a.label as Hasil, b.label as Actual, count(*)
FROM hasil a, actual b 
WHERE a.id_data = b.id_data
GROUP BY a.label, b.label