SQL Group по 2 столбцам

Я хочу отображать один раз в нескольких строках с 2 GROUP_BY

Моя таблица такая

    +----+----------+-------+
    | ID | BRAND |   TYPE    | 
    +----+----------+-------+
    |  1 | A     |  Clothes  | 
    |  2 | A     |  Hat      | 
    |  3 | A     |  Hat      | 
    |  4 | A     |  Hat      | 
    |  5 | B     |  Jeans    | 
    |  6 | B     |  Jeans    | 
    |  7 | B     |  Hat      |
    |  8 | C     |  Clothes  |
    |  9 | C     |  Jeans    |
    | 10 | C     |  Jeans    |
    | 11 | C     |  Hat      | 
    +----+-------+-----------+

И мой запрос вроде этого

SELECT brand, 
       type, 
       COUNT(*) AS total
FROM store  
GROUP BY brand, type

Когда я запускаю этот запрос, результат

        -----------------------------
        | BRAND |   TYPE    |  TOTAL |
        -----------------------------
        | A     |  Clothes  |   1    |
        | A     |  Hat      |   3    | 
        | B     |  Jeans    |   2    |
        | B     |  Hat      |   1    |
        | C     |  Clothes  |   1    |
        | C     |  Jeans    |   2    |
        | C     |  Hat      |   1    |
        ------------------------------

Я не ожидал такого результата. Я просто хочу отобразить один раз Brand, а со следующим Type также отобразить один раз, если есть несколько одинаковых значений.

ОБНОВЛЕНИЕ: ожидайте результата

        -------------------------------------------
        | BRAND |   TYPE                |  TOTAL |
        -------------------------------------------
        | A     |  Clothes, Hat         |   4    |
        | B     |  Jeans, Hat           |   3    |
        | C     |  Clothes, Jeans, Hat  |   4    |
        -------------------------------------------

Укажите ожидаемый результат.

jarlh 02.10.2018 11:29

Italien невозможно, если вы хотите показать оба столбца brand и type. Если вы сгруппируете столбец brand, что вы ожидаете увидеть в столбце type, поскольку там несколько (разных) значений сгруппированы вместе?

Johan 02.10.2018 11:32

@jarlh обновленный вопрос

Beadyyy 02.10.2018 11:34

Если type целочисленный, возможно ли это?

Beadyyy 02.10.2018 11:35
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
4
134
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ваше описание предлагает мне сделать условную агрегацию:

SELECT brand, 
       COUNT(DISTINCT CASE WHEN TYPE = 'Clothes' THEN TYPE END) AS Clothes,
       COUNT(DISTINCT CASE WHEN TYPE = 'Hat' THEN TYPE END) AS Hat,
       COUNT(DISTINCT CASE WHEN TYPE = 'Jeans' THEN TYPE END) AS Jeans
FROM store s
GROUP BY brand;

Если вам нужна одна строка с несколькими типами, вы можете использовать GROUP_CONCAT:

SELECT brand, GROUP_CONCAT(DISTINCT TYPE) As TYPE, COUNT(total) AS total
FROM store s  
GROUP BY brand;
Ответ принят как подходящий
  • Используя функцию Group_Concat с предложением Distinct, вы можете получить все разные типы и типы уникальный в строке, разделенной запятыми, в группе brand.
  • Используйте функцию Sum, чтобы вычислить общую

Попробуйте следующее:

SELECT brand, 
       GROUP_CONCAT(DISTINCT type) As type, 
       SUM(total) AS total
FROM store  
GROUP BY brand

Обновлено: О, вот оно! Это отлично работает с моим кодом! Большое спасибо

Beadyyy 02.10.2018 11:38

при этом вы получаете только один тип для каждой марки

ВЫБЕРИТЕ марку, Макс. (Тип) Тип КА, СЧЁТ (*) КАК всего В магазине 444 р. ГРУППА ПО БРЕНДУ

Другие вопросы по теме