Как сделать SQL-запрос для DISTINCT и COUNT одновременно - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь сделать запрос, который позволяет мне DISTINCT column1 (name), column2 (mode) and column3 (date). Но в то же время я хочу посчитать значение в столбце mode из той же таблицы. Я пытаюсь объединить эти 2 запроса ( ниже ), но запросы из той же таблицы. Есть ли какое-нибудь решение?

  1. ВЫБЕРИТЕ DISTINCT Имя, Режим, Дата ОТ имени_таблицы
  2. ВЫБЕРИТЕ СЧЕТЧИК (Режим) ОТ имени_таблицы

Expected result

Столбец OnHand равен COUNT из столбца Mode

1 Ответ

0 голосов
/ 30 сентября 2019

Если я правильно понимаю, вам нужны оконные функции:

SELECT column1, column2, column3,
       SUM(COUNT(*)) OVER (PARTITION BY column2) as column2_cnt
FROM table_name 2
GROUP BY column1, column2, column3;

В каждой строке у вас будет количество column2 значений по всей таблице . Таким образом, значения будут повторяться в строках с одинаковым значением column2.

РЕДАКТИРОВАТЬ:

Исходя из вашего пересмотренного вопроса, вы, кажется, хотите:

SELECT name, mode, date,
       COUNT(*) OVER (PARTITION BY name) as cnt
FROM table_name
GROUP BY name, mode, date;

Вы можете выразить это другими способами:

SELECT t.name, t.mode, t.date, tn.cnt
FROM table_name t JOIN
     (SELECT name, COUNT(DISTINCT mode, date) as cnt
      FROM table_name t
      GROUP BY name
     ) tn
     ON t.name = tn.name
GROUP BY t.name, t.mode, t.date, tn.cnt;
...