|
Для колонки посчитать количество в других колонок
|
|||
---|---|---|---|
#18+
Здравствуйте! Пытался гуглить, но я даже не понимаю как правильно сформулировать коротка вопрос, т.е я даже не уверен что заголовок правильный. Вот описание что я хочу: Есть таблица: id, name, city В ней следующие записи 1 Витя Москва 2 Коля Питер 3 Витя Питер 4 Лена Москва я хочу сделать сортировку по полям ____ Москва Питер Все ...... 2 ......2 Витя ..... 1 ..... 1 Коля ..... 0 ..... 1 Лена ..... 1 ..... 0 т.е мне нужно взять все уникальные значения одного поля (name) и найти их количество для уникальных значений другого поля (city) Как это сделать? Также хочу выводить тотал ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2020, 19:58 |
|
Для колонки посчитать количество в других колонок
|
|||
---|---|---|---|
#18+
На каком языке программирования ты хочешь решать эту задачу? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2020, 20:04 |
|
Для колонки посчитать количество в других колонок
|
|||
---|---|---|---|
#18+
mayton, я программирую на андроид и запросы в бд имеют такой вид Код: java 1. 2.
мне нужно понять принцип как это делается, можно конечно тупо взять записи из бд и написать код перебора, но я уверен что sql умеет сама делать такие таблицы как я хочу ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2020, 20:11 |
|
Для колонки посчитать количество в других колонок
|
|||
---|---|---|---|
#18+
Вот как это можно сделать: 1)Получить список уникальных имен: names SELECT DISTINCT name FROM table 2)Получить список уникальных городов: cities SELECT DISTINCT city FROM table 3)Перебор names и cities с запросом в бд SELECT COUNT(city) FROM table WHERE name = some_name AND city = some_city 4)Получить тотал: SELECT COUNT(city) FROM table WHERE name = some_name Посколько имен 3 и городов 2, то запросов будет 3 * 2 = 6 Но для таблиц с 100 городами и 100 именами запросов будет 100*100 = 10 000, что видимо будет исполняться очень долго Как это сделать одним-двумя запросами для любого количества городов и имен? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 01:17 |
|
Для колонки посчитать количество в других колонок
|
|||
---|---|---|---|
#18+
LumisD, то, что ты ищешь, в русском языке называется трансформацией строк в столбцы. в английском для этого используется термин pivoting. Дальше все (включая ограничения) зависит от диалекта sql. Где-то (ms access) для выполнения такой задачи используется ключевое слово transform, в большинстве случаев - pivot. Во первых, такого рода техника есть не во всех диалектах. Во вторых, сама она строится вокруг group by, (если нужно перевести конструкцию в диалект, где для этого нет готового ключевого слова). Но можно ли при этом одним запросом вывести еще и итоги - зависит от деталей устройства (поддерживаемого синтаксиса) group by в конкретном диалекте sql. Вопрос про запрос надо задавать всегда по отношению к конкретному диалекту sql. Переводится полученный ответ, и как, на другой диалект - требует указания конкретного другого диалекта. "Универсальный" sql существует только в текстах стандартов, в конкретных реализациях его нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 02:40 |
|
Для колонки посчитать количество в других колонок
|
|||
---|---|---|---|
#18+
booby, спасибо за совет! К сожалению первоначальный мой пост уже не редактируется, я не упомянул некоторые важные детали, как например, что это sqlite. Я написал пост сюда: https://stackoverflow.com/questions/62252692/sqlite-query-to-get-table-based-on-values-of-another-table ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 03:02 |
|
Для колонки посчитать количество в других колонок
|
|||
---|---|---|---|
#18+
То, что требуется, называется PIVOT, или перекрёстный запрос. SQLite эту штуку не поддерживает (даже не упоминает в документации). В СУБД, не поддерживающих PIVOT, его эмулируют динамическим SQL. Однако и с этим у SQLite напряжёнка - нету, хоть убейся. А потому решение единственное - строить текст запроса на клиенте, а потом выполнять в SQLite (или первым запросом прямо на стороне SQLite построить текст второго запроса - это несложно, SQLite знает про GROUP_CONCAT()). Для построения текста запроса предварительно потребуется получить отдельным запросом список городов Код: sql 1.
после чего строить и выполнять текст запроса типа Код: sql 1. 2. 3. 4. 5. 6. 7.
Общую сумму придётся считать либо отдельным запросом (или подзапросом), либо по итогам перекрёстного запроса - многие СУБД используют для этого WITH ROLLUP, но SQLite и этого не поддерживает. Модератор: Тема перенесена из форума "Программирование". ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 07:36 |
|
Для колонки посчитать количество в других колонок
|
|||
---|---|---|---|
#18+
Akina, Спасибо! Работающий запрос в конце концов выглядит так: Код: sql 1. 2. 3. 4.
Т.к это андроид приложение и используется Room для работы с БД, то результат будет в виде листа POJO класса и он должен содержать поля: Код: java 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2020, 01:49 |
|
|
start [/forum/topic.php?fid=13&fpage=2&tid=1330729]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 142ms |
0 / 0 |