Как подсчитать повторяющиеся значения по столбцам? - PullRequest
0 голосов
/ 08 марта 2020

У меня довольно простая проблема, которую мне нужно решить с помощью SQL> В базе данных есть несколько столбцов значений, которые являются дубликатами. Я пытаюсь подсчитать количество значений, которые встречаются в этих столбцах. Мне нужно знать, сколько значений для каждой категории. Например, если есть столбец для различных типов файлов cookie, которые продает одна пекарня; шоколад и изюм, а в другой колонке есть типы печенья, которые продаются в других пекарнях, включая шоколад и изюм. Я хочу знать, сколько шоколадного печенья продают все пекарни.

Мой запрос:

SELECT types_cookies_store01. COUNT(*) FROM cookies
GROUP BY types_cookies_store01

Этот код возвращает счетчик только одного столбца, но как узнать счетчик по всем столбцам?

Спасибо!

1 Ответ

2 голосов
/ 08 марта 2020

Ваша модель данных плохая!

Предполагается, что она равна:

| types_cookies_store01 | types_cookies_store02 | types_cookies_store03 |
|-----------------------|-----------------------|-----------------------|
| A                     |                       |                       |
| C                     |                       |                       |
|                       | A                     |                       |
| A                     |                       |                       |
| B                     |                       |                       |
|                       | B                     |                       |
|                       |                       | B                     |
| C                     |                       |                       |
|                       | C                     |                       |

Не используйте новый столбец для каждого магазина, используйте один столбец, чтобы указать магазин:

| Cookietype | Store |
|------------|-------|
| A          | 01    |
| A          | 03    |
| B          | 02    |
| B          | 01    |
| A          | 02    |
| C          | 02    |
| D          | 02    |
| B          | 03    |
| B          | 01    |
| A          | 03    |
| C          | 03    |

Теперь вы можете группировать по Cookietype, чтобы получать продажи всех магазинов.

Select Cookietype, Count(Cookietype) as CountOfCookieType 
From SalesTable 
Group By Cookietype

Или, чтобы получать продажи по магазинам, добавьте Магазин в группу по:

Select Cookietype, Store, Count(Cookietype) as CountOfCookieType 
From SalesTable 
Group By Cookietype, Store

С этой моделью данных вы можете добавлять (почти) неограниченное количество новых хранилищ.

С вашей моделью данных вам нужен новый столбец для каждого нового магазина, а таблицы ограничены 255 столбцами!

Вы можете обойти свою плохую модель, используя объединенный запрос:

SELECT  UnionCols.Cookietype, COUNT(*) 
FROM (
    SELECT types_cookies_store01 As Cookietype, 'Store01' As Store 
    FROM cookies 
    WHERE Not types_cookies_store01 Is Null
    UNION ALL
    SELECT types_cookies_store02 As Cookietype, 'Store02' As Store 
    FROM cookies 
    WHERE Not types_cookies_store02 Is Null
    UNION ALL
    SELECT types_cookies_store03 As Cookietype, 'Store03' As Store 
    FROM cookies 
    WHERE Not types_cookies_store03 Is Null
    ) As UnionCols
Group By UnionCols.Cookietype

Но производительность при работе с большими данными будет плохой, и новые хранилища сложно добавить.

Настоятельно рекомендуется улучшить свою модель данных вместо того, чтобы обходить ее!

Некоторые ссылки для чтения:

Основы проектирования баз данных

Доступ все в одном

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...