Добавить столбец в SQL-запрос

#postgresql

#postgresql

Вопрос:

Существует некоторый выбор

 SELECT column1, 
COUNT(CASE column2 WHEN 'type1' THEN 1 ELSE NULL END) AS Type1Count,
COUNT(CASE column2 WHEN 'type2' THEN 1 ELSE NULL END) AS Type2Count,
COUNT(CASE column2 WHEN 'type3' THEN 1 ELSE NULL END) AS Type3Count
FROM Yourtable 
GROUP BY column1
  

помогите мне, пожалуйста, как я могу добавить column0, значения которого соответствуют column1 в запросе выбора, что-то вроде этого

 SELECT column0, column1, 
COUNT(CASE column2 WHEN 'type1' THEN 1 ELSE NULL END) AS Type1Count,
COUNT(CASE column2 WHEN 'type2' THEN 1 ELSE NULL END) AS Type2Count,
COUNT(CASE column2 WHEN 'type3' THEN 1 ELSE NULL END) AS Type3Count
FROM Yourtable 
GROUP BY column1
  

но мой вариант не работает…

Комментарии:

1. мне нужен уникальный результат из column1, если я ВЫБРАЛ column0, column1, … ГРУППА ПО column0, column1 результатом этого запроса являются все данные, но мне нужен уникальный column1, как в первом примере.

Ответ №1:

Когда вы выбираете точное значение некоторых столбцов и агрегируете (например COUNT() , SUM() ) для других, вам нужно указать базе данных, что есть что в GROUP BY предложении.

Если вы скажете:

 GROUP BY column0, column1
  

Затем для каждой уникальной комбинации column0 и column1 вы получите дополнительную строку результатов с COUNT() выражениями, вычисляемыми по всем строкам таблицы для этой комбинации.

Если вам нужна только одна строка для каждого отдельного значения column1 , вам нужно вместо этого сообщить базе данных, какое значение column0 вас интересует. Например, вы можете запросить минимальное значение column0 для каждого column1 с помощью этого:

 SELECT MIN(column0), column1 ... GROUP BY column1
  

Что означает:

  • Мне нужна одна строка для каждого отдельного значения … ( GROUP BY ... )
    • column1 ( ... column1 )
  • Для каждой строки покажите мне ( SELECT ):
    • Минимальное значение column0 в этой группе
    • Значение column1 которого будет одинаковым для всего в этой группе

Комментарии:

1. это почти результат, но теперь я вижу в результате column0, как мне нужно, и не вижу соответствующего column1…

2. я пытаюсь ВЫБРАТЬ MIN(column0), COUNT(CASE column2, КОГДА ‘type1’, ЗАТЕМ 1 ELSE NULL END) КАК Type1Count, COUNT (CASE column2, КОГДА ‘type2’, ЗАТЕМ 1 ELSE NULL END) КАК Type2Count, COUNT (CASE column2, КОГДА ‘type3’, ЗАТЕМ 1 ELSE NULL END) КАК Type3Count ИЗ YourtableГРУППИРОВАТЬ ПО столбцу1

3. ВЫБЕРИТЕ MIN(column0), MIN(column1) — сработало для меня!!!! Если это правильный запрос, это то, что мне нужно! 🙂

4. Ваш SELECT список не содержит column1 . Результаты содержат все столбцы, которые вы запрашиваете в SELECT списке. Я немного отредактировал.

5. Вам не нужно MIN() обходить то, по чему вы группируете — нет никакого «минимума», потому что у вас есть разные строки для каждого отдельного значения.