Получить сумму для столбца на основе условия

Это чистое решение для 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;
}

Live demo

Кредит относится к Dave и Sime Vidas

Использование более современных JS, hasClass может быть реализовано как:

function hasClass(elem, className) {
    return elem.classList.contains(className);
}

1
задан ging 28 March 2019 в 00:43
поделиться

2 ответа

Чтобы вычислить сумму 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

Подсказка: вы можете выполнить внутренний запрос независимо от посмотрим, что он возвращает (это помогает понять логику).

0
ответ дан GMB 28 March 2019 в 00:43
поделиться

Вы можете использовать разбиение по запросу, чтобы создать отдельный раздел в соответствии с 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
.
0
ответ дан AmilaMGunawardana 28 March 2019 в 00:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: