• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zagnieżdżone pytanie w widoku mysql i podzapytanie zwraca więcej niż jedna odpowiedz

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
1,238 wizyt
pytanie zadane 6 czerwca 2015 w SQL, bazy danych przez mowmiheniek Stary wyjadacz (11,900 p.)

Witam.
Nie potrafię sformułować pytania do widoku mysql.
Mam tabele na podstawie ktorej tworzę widok.

Tabela ma kolumny: rodzaj, kolor, ilość. Teraz chciałbym wyciągnąć do widoku zawartość danego koloru w każdym rodzaju.

select `rodzaj` AS `rodzaj`,`kolor` AS `kolor`,(`ilosc` / (select sum(`ilosc`) group by `rodzaj` from `wyliczenia`)) AS `suma` from `wyliczenia`

Takie zapytanie daje więcej wyników w `suma` i mysql wyrzuca błędy.
Czy jest na to sposób?

  

2 odpowiedzi

0 głosów
odpowiedź 6 czerwca 2015 przez Whinsy Użytkownik (620 p.)
edycja 6 czerwca 2015 przez Whinsy

Powiem Ci, że mało brakowało do poprawnego zapytania. Nie będę wymieniał twoich błędów, po prostu spójrz jak to powinno wyglądać. Mam nadzieję, że pomogłem wink

SELECT rodzaj, kolor, (ilosc / (SELECT sum(ilosc) FROM wyliczenia)) AS suma FROM wyliczenia GROUP BY rodzaj;

 

komentarz 6 czerwca 2015 przez mowmiheniek Stary wyjadacz (11,900 p.)
Niestety, w takim przypadku, łączy także kolory ze sobą i jest tylko np. czerwony.
Wynik:
sukienki - czerwony - 0,2
swetry - czerwony - 0,4

A ja chciałbym:

sukienki - czerwony -0,2
sukienki -niebieski -0,4
​sukienki -czarne -0,4

swetry - czerwony - 0,4
swetry - niebieski - 0,6

 

itp.

Przepraszam, pisałem z ręki i źle wstawiłem GROUP BY w nawiasie - oczywiście powinno być po FROM.
komentarz 6 czerwca 2015 przez Whinsy Użytkownik (620 p.)
Trochę tego nie pojmuję, skoro jeden rodzaj ma mieć wiele kolorów to przydałaby się jakaś relacja i zapytanie z JOIN'em. Ew. możesz zrobić iloczyn kartezjański, ale raczej nie będzie to tym czego potrzebujesz
komentarz 6 czerwca 2015 przez mowmiheniek Stary wyjadacz (11,900 p.)
Już tłumaczę. To jest widok mysql utworzony na podstawie tabeli która łączy tabelę rodzaj i tabele kolory. Wiec nie ma iloczynu kartezjanskiego.
0 głosów
odpowiedź 6 czerwca 2015 przez jeremus Maniak (59,720 p.)
spróbuj tak :

SELECT rodzaj, kolor, sum(ilosc) / (SELECT sum(ilosc) FROM wyliczenia group by rodzaj)  FROM wyliczenia GROUP BY rodzaj,kolor

 

komentarz 6 czerwca 2015 przez mowmiheniek Stary wyjadacz (11,900 p.)
Niestety: subquerty returns more than 1 row
komentarz 6 czerwca 2015 przez jeremus Maniak (59,720 p.)
no to w ten sposób :

create temporary table pods  (select rodzaj,sum(ilosc) as ilerodz from wyliczenia  group by rodzaj);
SELECT a.rodzaj,a.kolor,sum(ilosc)/ilerodz from `wyliczenia` a,pods b
where a.rodzaj=b.rodzaj
group by a.rodzaj,a.kolor

w sql microsoft, oracle itp działa bez tablicy tymczasowej taka składnia :


with  pods  as  (select rodzaj,sum(ilosc) as ilerodz from wyliczenia  group by rodzaj)
SELECT a.rodzaj,a.kolor,sum(ilosc)/ilerodz from `wyliczenia` a,pods b
where a.rodzaj=b.rodzaj
group by a.rodzaj,a.kolor

 

komentarz 7 czerwca 2015 przez mowmiheniek Stary wyjadacz (11,900 p.)

Wpadłem na podobny sposób, zanim przeczytałem twoją odpowiedź.

Z tabeli `wyliczenia` zrobiłem jeden widok obliczający sumę w danej kategorii o nazwie `suma` , a drugi widok  taki:

SELECT w.rodzaj, w.kolor, s.rodzaj, (w.ilosc/s.suma) AS `oblicz` 
FROM wyliczenia AS w INNER JOIN suma AS s 
ON w.rodzaj = s.rodzaj
GROUP BY w.rodzaj, w.kolor

i co najlepsze działa. :) 

Dziękuję za pomoc!

Podobne pytania

0 głosów
1 odpowiedź 203 wizyt
pytanie zadane 21 marca 2018 w PHP przez tirith Mądrala (5,940 p.)
0 głosów
1 odpowiedź 320 wizyt
pytanie zadane 1 czerwca 2018 w JavaScript przez mi-20 Stary wyjadacz (13,250 p.)
+1 głos
0 odpowiedzi 149 wizyt
pytanie zadane 22 kwietnia 2022 w PHP przez Grzegorz Mikina Dyskutant (8,060 p.)

93,164 zapytań

142,175 odpowiedzi

321,921 komentarzy

62,490 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 453p. - Marcin Putra
  2. 453p. - dia-Chann
  3. 447p. - Łukasz Piwowar
  4. 443p. - CC PL
  5. 431p. - Łukasz Eckert
  6. 428p. - rafalszastok
  7. 423p. - Adrian Wieprzkowicz
  8. 423p. - Michal Drewniak
  9. 418p. - rucin93
  10. 410p. - Piotr Aleksandrowicz
  11. 408p. - ksalekk
  12. 402p. - Mariusz Fornal
  13. 401p. - Dawid128
  14. 383p. - Hubert Chęciński
  15. 340p. - ssynowiec
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...