Как посчитать одно и то же значение в двух таблицах в sql - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть таблица с именем hasil и таблица с именем actual.Как я могу написать SQL-запрос для достижения ожидаемого результата в следующей таблице?

awfe]

Ответы [ 3 ]

0 голосов
/ 06 декабря 2018

Вы можете сделать это так:

Подготовить данные

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 |
+-------+--------+----------+

Пояснение

Сначала объедините данные из обеих таблиц по идентификатору в общий столбец между ними.

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 + фактическое, и затем сортируйте данные по своему вкусу.

0 голосов
/ 06 декабря 2018

Это должно работать.

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
0 голосов
/ 06 декабря 2018

Предполагая, что Hasil (id_data, метка), Actual (id_data, метка) и предполагается, что вы хотите ВНУТРЕННЕЕ СОЕДИНЕНИЕ (то есть: только передача строк агрегации с общими идентификаторами в обеих таблицах):

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

Во внешней части запроса вы выбираете приведенный выше результат ивыполните агрегирование (GROUP BY) с hasil_label и actual_label, используя функцию агрегации COUNT, которая будет СЧИТАТЬ, сколько раз встречается такая комбинация hasil_label и actual_label.

Это приведет к:

hasil_label, actual_label, count
Yes, Yes, 1
No, Yes, 2
No, No, 1
Yes, No, 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...