AMcoder - javascript, python, java, html, php, sql

Կատարեք հարցումներ կազմելու խմբեր նույն արդյունքի տողում

Ես ունեմ երկու սեղան. Սրա նման.

select * from extrafieldvalues;
+----------------------------+
| id | value | type | idItem |
+----------------------------+
| 1  | 100   | 1    | 10     |
| 2  | 150   | 2    | 10     |
| 3  | 101   | 1    | 11     |
| 4  | 90    | 2    | 11     |
+----------------------------+
select * from items
+------------+
| id  | name |
+------------+
| 10  | foo  |
| 11  | bar  |
+------------+

Ես պետք է հարցում անեմ և ստանամ այսպիսի բան.

+--------------------------------------+
| idItem  | valtype1 | valtype2 | name |
+--------------------------------------+
| 10      | 100      | 150      | foo  |
| 11      | 101      | 90       | bar  |
+--------------------------------------+

Լրացուցիչ դաշտերի արժեքների տեսակների քանակը փոփոխական է, բայց յուրաքանչյուր տարր ՄԻՇՏ օգտագործում է յուրաքանչյուր լրացուցիչ դաշտ:

07.02.2020

  • Այն կոչվում է առանցքային հարցում: StackOverflow-ն ունի դրա բազմաթիվ օրինակներ, որոնցից մեկը stackoverflow.com/questions/1237068/pivot-in-sqlite է: - տե՛ս Հարիդևի պատասխանը 07.02.2020
  • Ինչպես ասացի, հավելյալ դաշտերը փոփոխական են, կարող են լինել 2, 3, ... , n 07.02.2020
  • Դուք պետք է ստեղծեք հարցումը ծրագրային կերպով ձեր ճակատային մասում, այնուհետև, բոլոր համապատասխան արժեքների համար տարբերվող ընտրություն կատարելուց հետո: 07.02.2020

Պատասխանները:


1

Եթե ​​ունեք ընդամենը երկու դաշտ, ապա left join-ը սա տարբերակ է.

select i.*, efv1.value as value_1, efv2.value as value_2
from items i left join
     extrafieldvalues efv1
     on efv1.iditem = i.id and
        efv1.type = 1 left join
     extrafieldvalues efv2
     on efv1.iditem = i.id and
        efv1.type = 2 ;

Կատարման առումով երկու միացումները հավանաբար ավելի արագ են, քան ագրեգացիան, և դա հեշտացնում է items-ից ավելի շատ սյունակներ բերելը: Մյուս կողմից, պայմանական ագրեգացումը ավելի հեշտ է ընդհանրացվում, և կատարողականը փոքր-ինչ փոխվում է, քանի որ extrafieldvalues-ից ավելի շատ սյունակներ ավելացվում են select-ին:

07.02.2020
  • Ես անում եմ սա (Ես ստեղծում եմ հարցումը ծրագրային եղանակով) select itemes.*, valor0.datoValor as Voltaje, valor1.datoValor as Foto, valor2.datoValor as Volumen, valor3.datoValor as Marca, valor4.datoValor as Color from itemes left join valores valor0 on valor0.idItem=itemes.idItem left join valores valor1 on valor1.idItem=itemes.idItem left join valores valor2 on valor2.idItem=itemes.idItem left join valores valor3 on valor3.idItem=itemes.idItem left join valores valor4 on valor4.idItem=itemes.idItem Բայց ես ստանում եմ ավելի քան 60 միլիոն տողերի արդյունքներ (իսկ ITEMES աղյուսակը ունի 440) 13.02.2020

  • 2

    Օգտագործեք պայմանական ագրեգացիա

    select iditem, 
           max(case when type=1 then value end) as valtype1,
           max(case when type=2 then value end) as valtype2,name
    from extrafieldvalues a inner join items b on a.iditem=b.id
    group by iditem,name
    
    07.02.2020
  • Սա շատ լավ է. Ինչու՞ օգտագործեցիր մաքսը դրա հետ: Նաև առանց մաքսի չի աշխատում։ Ինչու է այսպես. 07.02.2020
  • @ArchDesai, կարող եք նաև օգտագործել min/sum-ը, խնդիրն այն է, որ դուք պետք է օգտագործեք ագրեգատ ֆունկցիան, btw, եթե դա ձեզ օգնեց, խնդրում ենք համարել, որ այն նշվի որպես ընդունված: 07.02.2020
  • Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..