我有一个名为hasil
的表和一个名为actual
的表。如何编写SQL查询以达到下表中的预期结果?
答案 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