#php #mysql
#php #mysql
Вопрос:
У меня есть таблица, подобная
Name | Image | Points | Country
-------------------------------
Bob | a.jpg | 100 | USA
Bob | b.jpg | 56 | USA
Sal | c.jpg | 87 | UK
Jim | d.jpg | 34 | UK
Bet | e.jpg | 23 | USA
Bren | f.jpg | 5 | USA
Bren | g.jpg | 15 | UK
Test | h.jpg | 10 | USA
Я хочу получить верхние 4 самых высоких строки на основе столбца «Точки», где страна — «США», и удалить повторяющиеся «Имена», чтобы желаемый результат был
Name | Image | Points | Country
-------------------------------
Bob | a.jpg | 100 | USA
Bet | e.jpg | 23 | USA
Test | h.jpg | 10 | USA
Bren | f.jpg | 5 | USA
Любая помощь будет оценена, спасибо
Комментарии:
1. У вас уже есть какой-то код, который вы используете или?
2. Это домашнее задание? Я видел практически этот точный вопрос ранее
3. Ваш пример желаемого результата неверен?
Ответ №1:
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(image VARCHAR(12) NOT NULL PRIMARY KEY
,name VARCHAR(12) NOT NULL
,points INT NOT NULL
,country VARCHAR(12) NOT NULL
);
INSERT INTO my_table VALUES
('a.jpg','Bob' ,100,'USA'),
('b.jpg','Bob' , 56,'USA'),
('c.jpg','Sal' , 87,'UK'),
('d.jpg','Jim' , 34,'UK'),
('e.jpg','Bet' , 23,'USA'),
('f.jpg','Bren', 5,'USA'),
('g.jpg','Bren', 15,'UK'),
('h.jpg','Test', 10,'USA');
SELECT a.*
FROM my_table a
JOIN
( SELECT name,MAX(points) points FROM my_table WHERE country = 'USA' GROUP BY name ) b
ON b.name = a.name
AND b.points = a.points
ORDER
BY points DESC
LIMIT 4;
------- ------ -------- ---------
| image | name | points | country |
------- ------ -------- ---------
| a.jpg | Bob | 100 | USA |
| e.jpg | Bet | 23 | USA |
| h.jpg | Test | 10 | USA |
| f.jpg | Bren | 5 | USA |
------- ------ -------- ---------
Ответ №2:
select table.* from table join
(select Name, max(Points) mp from table where Country='USA' group by Name
order by mp desc limit 4) t
on table.Name = t.Name and table.Points = t.mp and table.Country='USA'
order by table.points desc
Когда строка с максимальной точкой пользователя имеет две записи, например, Боба b.jpg также равно 100, это привело бы к появлению нескольких строк в результате bobs.
Комментарии:
1. @AshleyBowman будьте внимательны к повторяющимся точкам ситуации с одним и тем же человеком
2. Просто оценил… Приятно @Ashley
Ответ №3:
Попробуйте это:
SELECT Name,Image,MAX(points),country
FROM table_1
ORDER BY points desc
GROUP BY Name,points
LIMIT 4