Поиск значений с меньшим количеством повторений в SQLite - PullRequest
0 голосов
/ 01 октября 2018

У меня есть таблица с несколькими столбцами, но два, которые меня волнуют, мы можем назвать Альфа и Бета.Также есть третий, Гамма, который сравнивает Альфу и Бету.Мы упростим его и скажем, что гамма - это разница между альфа и бета-версиями, поэтому у меня есть что-то вроде этого:

Alpha  Beta  Gamma
-----  ----  -----
1       A     (some answer)
1       B     (some answer)
1       C     (some answer)
2       A     (some answer)
2       B     (some answer)
2       C     (some answer)
3       A     (some answer)
3       B     (some answer)
3       C     (some answer)
4       A     (some answer)
4       B     (some answer)
4       C     (some answer)

На данный момент содержимое гаммы не имеет значения.

скажем, я получаю новое значение в бета-версии, "D"У меня есть 1D и 3D, но не 2D и 4D.

Могу ли я найти в Sqlite запрос, какие значения Alpha еще не имеют соответствующего значения D?Например, в этой таблице:

Alpha  Beta  Gamma
-----  ----  -----
1       A     (some answer)
1       B     (some answer)
1       C     (some answer)
1       D     (some answer)
2       A     (some answer)
2       B     (some answer)
2       C     (some answer)
3       A     (some answer)
3       B     (some answer)
3       C     (some answer)
3       D     (some answer)
4       A     (some answer)
4       B     (some answer)
4       C     (some answer)

Поскольку мне нужно, чтобы каждое значение альфа-канала имело соответствующее значение бета-версии, мне кажется, это то, что мне нужно сделать:

  1. Получитьсписок значений, отсутствующих для каждого значения в альфе (другими словами, в этом случае это будет просто D.
  2. Получить список каждого значения в альфа, которое не имеет соответствующего значения в D.

В конечном счете, мне нужно заполнить таблицу, чтобы каждое альфа-значение имело соответствующее бета-значение для каждого значения в бета-версии.

( ПРИМЕЧАНИЕ : детальпосле того, как 2-я таблица была изменена, чтобы предоставить список конкретных шагов, которые, я думаю, мне нужно сделать.)

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Подсчитайте, сколько Бета существует для каждой Альфы:

SELECT Alpha, COUNT(*)
FROM MyTable
GROUP BY Alpha;

Затем возьмите максимальное значение и получите все меньшие значения:

WITH Counts(Alpha, Count) AS (
  SELECT Alpha, COUNT(*)
  FROM MyTable
  GROUP BY Alpha
)
SELECT Alpha
FROM Counts
WHERE Count < (SELECT MAX(Count)
               FROM Counts);
0 голосов
/ 01 октября 2018

Можете ли вы сделать:

1) Для ответа на вопрос (а):

Select beta from test 
  GROUP BY beta
  having count(alpha) < (select count(distinct alpha) from test);

2) Вопрос (б):

Select alpha from test 
  GROUP BY alpha
  having count(beta) < (select count(distinct beta) from test);

Пробовал св качестве ввода:

Create table test (alpha int, beta varchar(2));

insert into test values (1, "A");
insert into test values (1, "B");
insert into test values (1, "C");
insert into test values (1, "D");
insert into test values (2, "A");
insert into test values (2, "B");
insert into test values (2, "C");
insert into test values (3, "A");
insert into test values (3, "B");
insert into test values (3, "C");
insert into test values (3, "D");
insert into test values (4, "A");                                           
insert into test values (4, "B");                                           
insert into test values (4, "C");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...