基于其他行值的总和权重

时间:2018-03-27 11:49:32

标签: sql

我正在寻找一个查询来对每一行(每个问题)的权重(从第一行 - > q17)求和,但是基于其他问题的答案。如果答案在其他问题中没有价值,那么我们的想法就是忽略总和中的价值。

例如

this._authService.login(this.user)
    .takeUntil(this.destroy$)
    .subscribe(
    (response: User) => {
        if(response.user_on_test) {
             // open the modal
        }
    },
    {
        ...
    });

权重为q17。我需要计算每个问题的权重。但是如果没有回答问题,我不需要加权。

不要将q18-32作为值,只要将它们作为真/假,如果它有一个或不是该问题的值,则根据每个q的q17加权。

数据如下

q17 5   5   4   3   5   5   4   5   =   36  for q17
q18 4   2   3   2   5   4   1   4   =   36  for q18
q19 5   2   4   2   5   4   1   4   =   36  for q19
q20 4   2   5   3   5   4   1   4   =   36  for q20
q21 4       5   3   5   5   1       =   26  for q21
q22 4   2   4   2   4   4   1   4   =   36  for q22
q23 4   1   4   3   5   4   1   4   =   36  for q23
q24 4   1   4   1   5   3   1   4   =   36  for q24
q25 5   2   4   3   5   4   1   4   =   36  for q25
q26 5   4   5   3   5   5   5   5   =   36  for q26
q27 5   4   4   1   5   4   1   4   =   36  for q27
q28 4   1   5   2   5   5   1   4   =   36  for q28
q29 5   5   5   4   5   4   5   5   =   36  for q29
q30 4   2   3   2   5   4   1   4   =   36  for q30
q31 4   3   4   4   5   4   1   5   =   36  for q31
q32 4   1   4   1   5   4   1   4   =   36  for q32

2 个答案:

答案 0 :(得分:4)

我认为这就是你所需要的:

SELECT   'q'+CAST(Q AS nvarchar(4)) AS Q,
         CAST(SUM(A) AS NVARCHAR(4)) + ' total for q' + CAST(Q AS NVARCHAR(4)) AS A
FROM     tbl
GROUP BY Q  

使用示例SQL fiddle

输出:

Q   A
q17 36 total for q17
q18 25 total for q18
q19 27 total for q19
q20 28 total for q20
q21 23 total for q21
q22 25 total for q22
q23 26 total for q23
q24 23 total for q24
q25 28 total for q25
q26 37 total for q26
q27 28 total for q27
q28 27 total for q28
q29 38 total for q29
q30 25 total for q30
q31 30 total for q31
q32 24 total for q32

答案 1 :(得分:0)

CREATE TABLE Table1
    (`col0` varchar(3),
     `col1` int,
     `col2` int, 
     `col3` int, 
     `col4` int, 
     `col5` int, 
     `col6` int,
     `col7` int, 
     `col8` int)
;

INSERT INTO Table1
    (`col0`, `col1`, `col2`, `col3`, `col4`, `col5`, `col6`, `col7`, `col8`)
VALUES
    ('q17', 5, 5, 4, 3, 5, 5, 4, 5),
    ('q18', 4, 2, 3, 2, 5, 4, 1, 4),
    ('q19', 5, 2, 4, 2, 5, 4, 1, 4),
    ('q20', 4, 2, 5, 3, 5, 4, 1, 4),
    ('q21', 4, NULL, 5, 3, 5, 5, 1, Null),
    ('q22', 4, 2, 4, 2, 4, 4, 1, 4),
    ('q23', 4, 1, 4, 3, 5, 4, 1, 4),
    ('q24', 4, 1, 4, 1, 5, 3, 1, 4),
    ('q25', 5, 2, 4, 3, 5, 4, 1, 4),
    ('q26', 5, 4, 5, 3, 5, 5, 5, 5),
    ('q27', 5, 4, 4, 1, 5, 4, 1, 4),
    ('q28', 4, 1, 5, 2, 5, 5, 1, 4),
    ('q29', 5, 5, 5, 4, 5, 4, 5, 5),
    ('q30', 4, 2, 3, 2, 5, 4, 1, 4),
    ('q31', 4, 3, 4, 4, 5, 4, 1, 5),
    ('q32', 4, 1, 4, 1, 5, 4, 1, 4)
;


SELECT *, 
Concat('= ',(IFNULL(`Col1`,0)+ 
             IFNULL(`Col2`,0)+ 
             IFNULL(`Col3`,0)+ 
             IFNULL(`Col4`,0)+ 
             IFNULL(`Col5`,0)+ 
             IFNULL(`Col6`,0)+ 
             IFNULL(`Col7`,0)+ 
             IFNULL(`Col8`,0)),' For ',Col0) As Result from Table1

现场演示

  

http://sqlfiddle.com/#!9/8dcff2/2