ДОБАВИТЬ:
SQL-запрос:
SELECT s.name
, d.feeling
, COUNT(1) AS times
FROM data_table d
, staff s
WHERE d.nid = s.id
AND d.project_id = 1
AND d.crawl_time BETWEEN '2018-10-17' AND '2018-10-24'
AND LENGTH(TRIM(d.feeling)) > 0
GROUP
BY d.nid
, d.feeling
ДОБАВИТЬ (КОНЕЦ)
Я пишу sql, чтобы запросить время группы чувств каждого тела по имени и чувству. Вот результат.
-- a certain sql returns, not an existing table --
`name` `feeling` `times` (expect)
Jack happy 10 0.45
Jack sad 7 0.31
Jack common 5 0.22
Lily happy 3 0.27
Lily sad 6 0.54
Lily common 2 0.18
Sam happy 6 0.42
Sam sad 7 0.5
Sam common 1 0.07
Теперь цель - вычислить соотношение чувств каждого. Например, счастливое чувство Джека берет из его чувств 10/(10+7+5)
, а за грустное чувство - 7/(10+7+5)
.
При использовании SUM(result.count)
и GROUP BY name
для рисования грустные или обычные чувства не проявляются. Затем я использую подзапрос, но таблица не существует. Есть ли способ работать без создания представления?
Вы тоже можете включить свой запрос?
Ставлю запрос вверху.
Я отредактировал сообщение и опустил неофициальные слова. Извините за неприличие. @Клубника
Одно решение, которое должно работать с любой версией MySQL, использует подзапрос, чтобы найти сумму times
для каждого имени, а затем присоединяется к нему:
SELECT
t1.name,
t1.feeling,
t1.times,
t1.times / t2.times_sum AS feeling_ratio
FROM yourTable t1
INNER JOIN
(
SELECT name, SUM(times) AS times_sum
FROM yourTable
GROUP BY name
) t2
ON t1.name = t2.name;
Если вы используете MySQL 8+ или новее и имеете доступ к аналитическим функциям, то есть более простой способ написать это:
SELECT
t1.name,
t1.feeling,
t1.times,
t1.times / SUM(t1.times) OVER (PARTITION BY t1.name) AS feeling_ratio
FROM yourTable t1;
Боюсь, что упомянутая вами таблица yourTable не существует, это представление (результат запроса), а не таблица.
Это не имеет значения. Просто замените yourTable
на yourView
, и тогда запрос должен работать.
Простите, вы имеете в виду, что я должен заменить дважды? Только что я попробовал заменить первый t1, но не заменил второй. Произошла ошибка: таблица t1 не существует. @Tim Biegeleisen
Вы тоже можете включить свой запрос?