Это чистое решение для JavaScript без каких-либо библиотек или плагинов:
document.addEventListener('click', function (e) {
if (hasClass(e.target, 'bu')) {
// .bu clicked
// Do your thing
} else if (hasClass(e.target, 'test')) {
// .test clicked
// Do your other thing
}
}, false);
, где hasClass
-
function hasClass(elem, className) {
return elem.className.split(' ').indexOf(className) > -1;
}
Кредит относится к Dave и Sime Vidas
Использование более современных JS, hasClass
может быть реализовано как:
function hasClass(elem, className) {
return elem.classList.contains(className);
}
Чтобы вычислить сумму field7
в группах записей с одинаковым field4
, вы можете использовать оконную функцию SUM(...) OVER(...)
.
Чтобы просто сохранить одну запись на группу записей, имеющих одинаковые field4
, вы можете использовать ROW_NUMBER()
во внутреннем запросе и отфильтровывать нежелательные записи во внешнем запросе. Обратите внимание, что вам нужен критерий сортировки , чтобы надежно выбрать, какую запись следует хранить в каждой группе. Я решил использовать field1
(измените его, как вам нужно):
Ваш (псевдо) запрос должен выглядеть следующим образом:
SELECT * FROM (
SELECT
a.field1,
b.field2,
c.field3,
c.field4,
b.filed5,
a.field6,
SUM(d.field7) OVER(PARTITION BY c.field4) sm,
ROW_NUMBER() OVER(PARTITION BY c.field4 ORDER BY a.field1) rn,
FROM
a
INNER JOIN b on a.field1 = b.field1
RIGHT JOIN c on b.field2 = c.field3
LEFT JOIN d on d.field3 = a.field1
WHERE some conditions
) x
WHERE rn = 1
Подсказка: вы можете выполнить внутренний запрос независимо от посмотрим, что он возвращает (это помогает понять логику).
Вы можете использовать разбиение по запросу, чтобы создать отдельный раздел в соответствии с field4, а затем взять сумму
SELECT
z.* FROM (SELECT
a.field1,
b.field2,
c.field3,
b.filed5,
a.field6,
SUM(d.field4) OVER (PARTITION BY a.field1, b.field2, c.field3, b.filed5, a.field6) AS field7,
ROW_NUMBER() OVER (PARTITION BY c.field4 ORDER BY c.field4) AS rank FROM a INNER JOIN b
ON a.field1 = b.field1 RIGHT JOIN c
ON b.field2 = c.field3 LEFT JOIN d
ON d.filed3 = a.field1 where some conditions; ) z WHERE z.rank = 1
.