#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
Теперь вы хотите получить сумму группы точек по 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;