Как создать строку sql для подсчета выбранных строк с помощью группы - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь запросить базу данных mysql со столбцами AUTHOR, TITLE, TEXT, чтобы подсчитать все экземпляры текстов по заданному заголовку, сгруппированные по автору, например, моя таблица выглядит так enter image description here

Если мой параметр - «Большие надежды», есть 2 записи «Великие ожидания» Диккенса и 1 запись «Великие надежды» какой-то Кэти Акер.

[{author=Charles Dickens, title=Great Expectations, count=2}, {author=Kathy Ackers, title=Great Expectations, count=1}]

Пока что я подошел с этой строкой:

 jdbcTemplate.queryForList("SELECT author, title, COUNT(*) as count FROM Quote GROUP BY author")

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

Я подумал включить ... WHERE title = "Great Expectations" ... но это не работает.

Ответы [ 2 ]

1 голос
/ 28 мая 2020

Это то, что вы ищете? Из вашего вопроса сложно понять, что находится в вашем текстовом поле? Какие данные? Что ты считаешь? Насколько я понимаю, это:

SELECT author, title, ROUND ((LENGTH(text) - LENGTH(REPLACE(text, 
                            title, "") )) / LENGTH(title))  AS count
FROM Quote

Затем вы можете добавить это, чтобы выбрать только нужный заголовок:

where title = 'The Lost World'

Итак, вы получите это:

SELECT author, title, ROUND ((LENGTH(text) - LENGTH(REPLACE(text, 
                            title, "") ) 
        ) / LENGTH(title)        
    )  AS count
FROM Quote
where title = 'The Lost World'

Вот демонстрация

Читая ваш вопрос второй раз, я вижу, что вам может понадобиться это:

SELECT author, title, COUNT(*) as count 
FROM Quote 
where title = 'The Lost World'
GROUP BY author, title

или вот так:

jdbcTemplate.queryForList("SELECT author, title, COUNT(*) as count FROM Quote 
where title = 'The Lost World'
GROUP BY author, title")
0 голосов
/ 28 мая 2020

Вам нужно ограничить агрегирование только книгами под названием «Затерянный мир»:

jdbcTemplate.queryForList("SELECT author, COUNT(*) AS count FROM Quote WHERE title = 'The Lost World' GROUP BY author")

Фактически, ваш текущий запрос будет работать только с некоторыми базами данных, такими как MySQL или SQLite, потому что выпуска GROUP BY. Вот исходный запрос:

SELECT author, COUNT(*) AS count
FROM Quote
WHERE title = 'The Lost World'
GROUP BY author;
...