| 
 | 
| 
 
Для колонки посчитать количество в других колонок 
 | 
|||
|---|---|---|---|
| 
 #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&msg=39966912&tid=1330729]:  | 
    0ms | 
get settings:  | 
    10ms | 
get forum list:  | 
    13ms | 
check forum access:  | 
    4ms | 
check topic access:  | 
    4ms | 
track hit:  | 
    57ms | 
get topic data:  | 
    9ms | 
get forum data:  | 
    2ms | 
get page messages:  | 
    49ms | 
get tp. blocked users:  | 
    1ms | 
| others: | 241ms | 
| total: | 390ms | 

| 0 / 0 | 

На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даете согласие с использованием данных технологий.