Есть такие таблицы:
users
id nick
1 krkm
2 goren
3 zerg
value_types
id value
1 post
2 comment
3 recommend
values
id user_id value_id value
1 1 1 50
2 1 2 5000
3 1 3 500
4 2 1 30
5 2 2 3000
6 2 3 300
7 3 1 10
8 3 2 1000
9 3 3 100
Надо получить что-то такое:
user post comment recommend
krkm 50 5000 500
goren 30 3000 300
zerg 10 1000 100
Куда нажать?
@anonymous >subquery + count
совсем тупой шоле
иирц у штелетты даже в апи было что-то подобное
@anonymous а, бля, тебе тут вообще нихера не нужны // ппц ты тупой
@vostrik да ты ебонись
@mugiseyebrows tst=# select nick, type, value from tst order by nick, type;
nick | type | value
-------+-----------+-------
goren | comment | 3000
goren | post | 30
goren | recommend | 300
krkm | comment | 5000
krkm | post | 50
krkm | recommend | 500
zerg | comment | 1000
zerg | post | 10
zerg | recommend | 100
(9 rows)
tst=# select * from crosstab('select nick, type, value from tst order by nick, type') AS tst(row_name varchar, comment int, post int, recommend int);
row_name | comment | post | recommend
----------+---------+------+-----------
goren | 3000 | 30 | 300
krkm | 5000 | 50 | 500
zerg | 1000 | 10 | 100
(3 rows)
@krkm sql уровня javascript
@anonymous (как первую табличку зделать надо объяснять?)
@vostrik лек
@vostrik тупой шоле, тогда надо where воткнуть обв
@vostrik (ну или зделать тама ноль, смотря что хочется)
@anonymous пиздос, ты задачу нормально давай, да? // #SZ745W/BJS #SZ745W/KQ3 // нули можно джойном зделать, а не забивать в таблицу, обв
@vostrik какой нахуй create? ты чо, ёбнутый?
@vostrik ты на каждый результат select'a новую таблицу создаёшь шоле?
@vostrik tst=# create table tst2(nick varchar, type varchar, "user" int);
CREATE TABLE
tst=# \d+ tst2
Table "public.tst2"
Column | Type | Modifiers | Storage | Stats target | Description
--------+-------------------+-----------+----------+--------------+-------------
nick | character varying | | extended | |
type | character varying | | extended | |
user | integer | | plain | |
@vostrik топ пук // в задаче нихуя не сказано, что с этими данными нужно делать.
tst=# create table asd as select * from crosstab('select nick,type,value from tst order by nick,type') AS tst(nick varchar, comment int, post int, recommend int);
SELECT 3
tst=# select * from asd;
nick | comment | post | recommend
-------+---------+------+-----------
goren | 3000 | 30 | 300
krkm | 5000 | 50 | 500
zerg | 1000 | 10 | 100
(3 rows)
@vostrik в текст запроса для crosstab обв
@vostrik чо ёпт?
tst=# create table asd2 as select * from crosstab('select nick,type,value from tst order by nick,type') AS tst("user" varchar, comment int, post int, recommend int);
SELECT 3
tst=# select * from asd2;
user | comment | post | recommend
-------+---------+------+-----------
goren | 3000 | 30 | 300
krkm | 5000 | 50 | 500
zerg | 1000 | 10 | 100
(3 rows)
@vostrik ОП, ты? Нихуя не вижу подобного в ОП-посте.
хули ты тут денормализируешь
http://sqlfiddle.com/#!3/142846/6/0 ещё один сикель-тырпрайз (не селект), типа #SZ745W/T51, но с xml-костылём +пивотом, вместо табличной переменной с циклом
@mugiseyebrows http://sqlfiddle.com/#!3/fe178/2/0 добавил order by id в получение списка названий колонок; новый тип добавлять отдельным инсертом (или явно указывать id, иначе инсертится puk тоже по алфавиту перед recommend)
@anonymous ппц этот ваш sql, по количеству костылей это что-то уровня баша походу
@mugiseyebrows поддержка многострочных инсертов значений через запятую появилась с SQLServer2008, а я живу в 2005 (не в 2017), поэтому либо набираю строки через юнион и делаю один инсерт, либо количество инсертов по количеству строк, что сильно медленнее