Как получить сумму всех максимальных значений столбца

#mysql #laravel

#mysql #laravel

Вопрос:

У меня проблема с получением cate и точки ниже.

Это запрос таблицы

 -------------------------------------------
id    title    cate    query_id    point   |
-------------------------------------------
1     A        1       1           1       |
2     B        1       1           3       |
3     C        1       1           2       |
4     A        2       2           3       |
5     B        2       2           2       |
6     C        1       2           1       |
--------------------------------------------
 

Если я сгруппирую (cate, query) и получу максимальную точку

 ----------------------------
cate    query_id    point   |
----------------------------
1       1           3       |
2       2           3       |
1       2           1       |
----------------------------
 

но я хочу получить сумму максимального значения по cate следующим образом:

 --------------
cate    point |
--------------
1         4   | 
2         3   |
--------------

 

Я надеюсь, что вы могли бы мне помочь.

Комментарии:

1. Я не понимаю вашего ожидаемого результата. Можете ли вы объяснить логику, стоящую за этим?

2. Я добавил логики. Не могли бы вы, пожалуйста, помочь мне.

Ответ №1:

Вы можете создать агрегат из агрегата, используя подзапрос производной таблицы, подобный этому:

 SELECT cate, SUM(point) AS point
FROM (
    SELECT cate, query_id, MAX(point) AS point
    FROM MyTable
    GROUP BY cate, query_id
) AS t
GROUP BY cate;
 

Комментарии:

1. Рад помочь. Помните, что при переполнении стека принято повышать голоса за ответы, которые помогли вам, и используйте зеленую галочку для ответа, который наилучшим образом решил вашу проблему.

Ответ №2:

при этом вы получите желаемый результат

 query::groupBy(cate,query_id)->sum(point)
 

Ответ №3:

Во-первых, вам нужно использовать group by(cate, query) и получить cate,query_id,max(точка).

 SELECT cate, query_id, MAX(point) AS point
FROM demo
GROUP BY cate, query_id
 

демо на dbFiddle

Теперь вы хотите получить сумму группы точек по cate из приведенного выше вывода запроса.

 SELECT p.cate, SUM(p.point) AS point
FROM (
    SELECT cate, query_id, MAX(point) AS point
    FROM demo
    GROUP BY cate, query_id
) AS p
GROUP BY cate;
 

демо-версия на dbfiddle