Гость
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Как выбрать все строки со значениями в столбце совпадающими с максимальным? / 4 сообщений из 4, страница 1 из 1
22.02.2017, 16:28
    #39409238
Red2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как выбрать все строки со значениями в столбце совпадающими с максимальным?
Есть таблица:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
BEGIN TRANSACTION;
DROP TABLE IF EXISTS "scores";
CREATE TABLE IF NOT EXISTS "scores" ("score_id" INTEGER PRIMARY KEY  AUTOINCREMENT UNIQUE , "game_id" INTEGER NOT NULL , "player_id" INTEGER NOT NULL , "score_value" INTEGER NOT NULL , "score_photo" TEXT NOT NULL DEFAULT "", "score_appended" DATETIME DEFAULT CURRENT_TIMESTAMP, "deleted" BOOL NOT NULL DEFAULT 0);
INSERT INTO "scores" VALUES(1,1,1,7,'','2017-02-22 09:52:00',0);
INSERT INTO "scores" VALUES(2,1,4,5,'','2017-02-21 19:03:17',0);
INSERT INTO "scores" VALUES(3,2,1,2,'','2017-02-21 19:03:37',0);
INSERT INTO "scores" VALUES(4,2,2,2,'','2017-02-21 19:03:42',0);
INSERT INTO "scores" VALUES(5,2,3,2,'','2017-02-21 19:03:48',0);
INSERT INTO "scores" VALUES(6,2,4,2,'','2017-02-21 19:03:52',0);
INSERT INTO "scores" VALUES(7,2,5,2,'','2017-02-21 19:06:39',0);
INSERT INTO "scores" VALUES(8,1,1,2,'','2017-02-22 09:18:29',0);
INSERT INTO "scores" VALUES(9,1,4,2,'','2017-02-22 09:18:36',0);
INSERT INTO "scores" VALUES(10,1,2,2,'','2017-02-22 12:03:36',0);
INSERT INTO "scores" VALUES(11,1,4,2,'','2017-02-22 09:18:52',0);
INSERT INTO "scores" VALUES(12,2,1,2,'','2017-02-22 09:19:02',0);
INSERT INTO "scores" VALUES(13,1,2,2,'','2017-02-22 12:03:56',0);
COMMIT;



Вот этот запрос получает то что надо, но вот чувство прекрасного, гложет и говорит что должен быть изящнее способ получить эти данные?
Код: sql
1.
SELECT "player_id",max("scores_value") "m" FROM (SELECT "player_id",sum("score_value") as "scores_value" FROM "scores" WHERE deleted=0 AND "game_id"=1 GROUP BY "player_id") as "t" group by "player_id" having "m"=(SELECT max("scores_value") FROM (SELECT sum("score_value") as "scores_value" FROM "scores" WHERE deleted=0 AND "game_id"=1 GROUP BY "player_id"));
...
Рейтинг: 0 / 0
22.02.2017, 16:40
    #39409243
Red2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как выбрать все строки со значениями в столбце совпадающими с максимальным?
Прошу прощения, поправил форматирование:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
BEGIN TRANSACTION;
DROP TABLE IF EXISTS "scores";
CREATE TABLE IF NOT EXISTS "scores" (
"score_id" INTEGER PRIMARY KEY  AUTOINCREMENT UNIQUE , 
"game_id" INTEGER NOT NULL , 
"player_id" INTEGER NOT NULL , 
"score_value" INTEGER NOT NULL , 
"score_photo" TEXT NOT NULL DEFAULT "", 
"score_appended" DATETIME DEFAULT CURRENT_TIMESTAMP, 
"deleted" BOOL NOT NULL DEFAULT 0);
INSERT INTO "scores" VALUES(1,1,1,7,'','2017-02-22 09:52:00',0);
INSERT INTO "scores" VALUES(2,1,4,5,'','2017-02-21 19:03:17',0);
INSERT INTO "scores" VALUES(3,2,1,2,'','2017-02-21 19:03:37',0);
INSERT INTO "scores" VALUES(4,2,2,2,'','2017-02-21 19:03:42',0);
INSERT INTO "scores" VALUES(5,2,3,2,'','2017-02-21 19:03:48',0);
INSERT INTO "scores" VALUES(6,2,4,2,'','2017-02-21 19:03:52',0);
INSERT INTO "scores" VALUES(7,2,5,2,'','2017-02-21 19:06:39',0);
INSERT INTO "scores" VALUES(8,1,1,2,'','2017-02-22 09:18:29',0);
INSERT INTO "scores" VALUES(9,1,4,2,'','2017-02-22 09:18:36',0);
INSERT INTO "scores" VALUES(10,1,2,2,'','2017-02-22 12:03:36',0);
INSERT INTO "scores" VALUES(11,1,4,2,'','2017-02-22 09:18:52',0);
INSERT INTO "scores" VALUES(12,2,1,2,'','2017-02-22 09:19:02',0);
INSERT INTO "scores" VALUES(13,1,2,2,'','2017-02-22 12:03:56',0);
COMMIT;



Вот этот запрос получает то что надо, но вот чувство прекрасного, гложет и говорит что должен быть изящнее способ получить эти данные?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
SELECT "player_id",max("scores_value") "m" 
FROM (
 SELECT "player_id",sum("score_value") as "scores_value" 
   FROM "scores" 
   WHERE deleted=0 AND "game_id"=1 
   GROUP BY "player_id"
)
GROUP BY "player_id" 
HAVING "m"=(
 SELECT max("scores_value") 
 FROM (
  SELECT sum("score_value") as "scores_value" 
  FROM "scores" WHERE deleted=0 AND "game_id"=1 
  GROUP BY "player_id"
 )
);
...
Рейтинг: 0 / 0
22.02.2017, 18:43
    #39409337
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как выбрать все строки со значениями в столбце совпадающими с максимальным?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with t(id, score) as (
  select player_id, sum(score_value)
  from scores
  where deleted=0 AND game_id=1 
  group by player_id
)
select t.*
from t
where t.score=(select max(score) from t)
...
Рейтинг: 0 / 0
27.02.2017, 22:47
    #39411274
Red2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как выбрать все строки со значениями в столбце совпадающими с максимальным?
White Owl,

Спасибо, не знал что with можно так хитро использовать.
...
Рейтинг: 0 / 0
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Как выбрать все строки со значениями в столбце совпадающими с максимальным? / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]