Mysql Limit По сумме счета - PullRequest
       3

Mysql Limit По сумме счета

0 голосов
/ 19 сентября 2018

У меня есть поле с 3 столбцами в идентификаторе таблицы mysql, статусе и числе. Я хочу получить группу состояний и сумму счетчиков с различными значениями идентификатора. Пример приведен ниже

id - status - count

1 - test1   -   1
1 - test1   -   1
1 - test2   -   1
1 - zer1   -    0
2 - exam1   -   1
2 - exam1   -   1
2 - zer2   -    0
2 - exam2   -   1
3 - mit1    -   1
3 - mit2    -   1
3 - zer3   -    0
4 - term1   -   1

Я хочу получить результат какследующий

id - status - count
1 - test1   -   2
2 - exam1   -   2
3 - mit1    -   1
4 - term1   -   1

я пробовал следующий запрос для результата, но я не получил результат

SELECT id,status,sum(count) as count FROM `test` where count=1 group by status order by id

для вышеуказанного запроса я получаю следующий результат

id - status - count
 1  test1   2
 2  exam1   2
 2  exam2   1
 3  mit1    1
 3  mit2    1
 4  term1   1

Я не могу найти правильный запрос, чтобы удалить дубликаты идентификаторов и упорядочить их по сумме. Пожалуйста, помогите мне получить результат.

Ответы [ 4 ]

0 голосов
/ 19 сентября 2018

Это сложная задача из-за двух записей с id 3, имеющих одинаковые count.Однако я думаю, что этот запрос будет делать то, что вы хотите:

SELECT c1.id, MIN(c1.status) AS status, c1.sum_c
FROM (SELECT id, status, SUM(`count`) AS sum_c 
      FROM `counts` 
      GROUP BY id, status
     ) c1
JOIN (SELECT id, MAX(sum_c) AS max_c
      FROM (SELECT id, status, SUM(`count`) AS sum_c 
            FROM `counts` 
            GROUP BY id, status
           ) c1
      GROUP BY id) c2
ON c2.id = c1.id AND c2.max_c = c1.sum_c
GROUP BY c1.id

Вывод:

id  status  sum_c
1   test1   2
2   exam1   2
3   mit1    1
4   term1   1
0 голосов
/ 19 сентября 2018

Попробуйте использовать подзапрос ниже:

   select t2.id, b.status, t2.scount 
from 
(SELECT id,max(scount) as scount 
FROM
(
   SELECT id,status,sum(count) as scount 
     FROM t where count=1
     group by status,id
)a group by id) t2
inner join 
(
    SELECT id,status,sum(count) as scount 
     FROM t where count=1
     group by status,id

)b on t2.id =b.id and t2.scount=b.scount
0 голосов
/ 19 сентября 2018

использовать связанный подзапрос

select min(status) status,id,s as count from
(
select * from 
(
select id,status,sum(cnt) s from t 
 where cnt>0
 group by id,status
) as  t1 where t1.s in( select max(s) from 
                          (select status,id,sum(cnt) s from t
                           where cnt>0
                            group by
                          status,id) t2 where t1.id=t2.id
                           group by t2.id
                       )
                       ) as t3 group by id,s

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=f15f06ce7e6967e1f6c1d21c830b3985

status  id  count
test1   1   2
exam1   2   2
mit1    3   1
term1   4   1
0 голосов
/ 19 сентября 2018

Вы можете использовать несколько запросов здесь как:

    Select distinct id from 
    (SELECT id,status,
   sum(count) as count 
   FROM `test` where count=1 group by status order by id 
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...