У меня есть таблица с такими столбцами:
idx | amount | usercol1 | usercol2 | usercol3 | percentage1 | percentage2 | percentage3
Данные обычно такие:
0 | 1500 | 1 | null | null | 100 | null | null
1 | 3000 | 2 | 3 | null | 50 | 50 | null
Я хотел бы сделать SUM () для суммы каждого пользователя.
Пример:
- user1 = 1500 * 100/100 (количество * usercol1 / 100)
- user2 = 3000 * 50/100 (количество * usercol1 / 100)
- user3 = 3000 * 50/100 (количество * usercol2 / 100)
Я попытался UNION безрезультатно (не суммировал суммы).
Есть ли способ сделать это ?Проблема в том, что он должен GROUP BY имя пользователя (которое я получаю с помощью имени пользователя LEFT OUTER JOIN ON exampletable.usercol1 = usernames.idx).
Я знаю, что это нестандартно и было бы лучше с отношениями из другогоТаблица.Но мне не разрешено менять структуру таблицы.
Большое, большое, большое спасибо!: =)
Таким образом, пример, который дает неправильный результат (кажется, дает только результаты из запроса в середине)
(
SELECT SUM(projects.amount * (projects.percentage1/100)) as totalproj,
entities.idx as idx,
COUNT(projects.idx) as numproj,
entities.name
FROM projects
INNER JOIN entities ON projects.usercol1=entities.idx
WHERE projects.usercol1=entities.idx
GROUP BY name ORDER BY totalproj DESC
)
UNION ALL
(
SELECT SUM(projects.amount * (projects.percentage2/100)) as totalproj,
entities.idx as idx,
COUNT(projects.idx) as numproj,
entities.name
FROM projects
INNER JOIN entities ON projects.usercol2=entities.idx
WHERE projects.usercol2=entities.idx
GROUP BY name ORDER BY totalproj DESC
)
UNION ALL
(
SELECT SUM(projects.amount * (projects.percentage3/100)) as totalproj,
entities.idx as idx,
COUNT(projects.idx) as numproj,
entities.name
FROM projects
INNER JOIN entities ON projects.usercol3=entities.idx
WHERE projects.usercol3=entities.idx
GROUP BY name ORDER BY totalproj DESC
)
ORDER BY totalproj DESC
LIMIT 10