SQL - GROUP BY все возможные переменные - PullRequest
0 голосов
/ 31 октября 2019

Я искал способ сделать это, но не могу найти решение.

Как выбрать и сгруппировать, не удаляя все возможные переменные из столбца 2, где переменная не существуетдля переменной из столбца 1?

Excel Example

Пример данных (слева) - как бы я хотел, чтобы (в середине) - текущий (справа)

Когда я хотел бысделать это:

<code>
SELECT Column1, Column2, COUNT(*) 
FROM Table
GROUP BY Column1, Column2;

Если бы я использовал эту строку кода, я не смог бы увидеть все переменные из column2 для каждой переменной для column1 (что я хотел бы). Потому что, если они не существуют, они не будут отображаться в результатах.

Поэтому я хотел бы увидеть все переменные из Column1 со всеми 4 возможными переменными из Column2, а затем подсчитать количество, которое существует в этой комбинации. .

Спасибо за помощь заранее, надеюсь, мой вопрос ясен.

Ответы [ 2 ]

1 голос
/ 31 октября 2019

Я думаю, вы хотите cross join, а затем left join и агрегацию:

select c1.column1, c2.column2, count(t.column1)
from (select distinct column1 from t) c1 cross join
     (select distinct column2 from t) c2 left join
     t
     on t.column1 = c1.column1 and t.column2 = c2.column2
group by c1.column1, c2.column2;
0 голосов
/ 02 ноября 2019

В зависимости от количества комбинаций округов и количества строк в вашей таблице, а также для каждой комбинации, может быть более эффективно использовать существующий выбор и расширять его с помощью перекрестного соединения, возвращая все возможные комбинации (аналогично методике Гордона, но с агрегированием до , затем присоединиться):

SELECT Column1, Column2, Sum(Cnt)
FROM
 (
   -- existing combinations
   SELECT Column1, Column2, Count(*) AS Cnt
   FROM mytable
   GROUP BY Column1, Column2

   UNION ALL

   -- all combinations
   SELECT c1.column1, c2.column2, 0 AS Cnt
   FROM (SELECT DISTINCT column1 FROM myTable) c1 CROSS JOIN
        (SELECT DISTINCT column2 FROM tmyTable) c2
 ) AS dt
GROUP BY 1,2 
...