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

Sumowanie ilości kartonów SQL

VPS Starter Arubacloud
0 głosów
618 wizyt
pytanie zadane 11 kwietnia 2018 w SQL, bazy danych przez hiper007 Stary wyjadacz (11,270 p.)
SELECT awizacja, SUM(appt.kartony)
FROM (SELECT DISTINCT LEFT(awizacja,6)
as awizacja, (appt.kartony) FROM appt) as appt GROUP by 1

Mam pytanko. Chciałbym aby zliczało mi sumę kartonów z wszystkich awizacji bez powtórzen. Przykład:

765432 1/3 (10 kartonów), 765432 2/3 (10 kartonów),765432 3/3 (10 kartonów), 765433 (20 kartonów),765434 (20 kartonów),765435 (20 kartonów),765436 (20 kartonów).

Suma 110 kartonów.

Ale 765432 1/3, 765432 2/3, 765432 3/3 to jedna i ta sama awizacji tylko rozdzielona na 3, dla której tylko raz powinno policzyć 10 kartonów, a nie 3 razy.

Prawidłowa ilość karonów to 90.

Tabela: appt
Kolumna: awizacja (numer awizacji 6 cyfr), kartony (ilość kartonów w awizacji)

Jak zmodyfikować tego SQLa powyższego, żeby  mi poprawnie sumowało bez powtórzen.Napisałem sqla powyżej, ale on nie sumuje razem wszystkich awizacji.

Proszę o info gdzie musiałbym poprawić.

Z góry dzięki

2 odpowiedzi

+1 głos
odpowiedź 11 kwietnia 2018 przez hoktaur Pasjonat (22,250 p.)
wybrane 11 kwietnia 2018 przez hiper007
 
Najlepsza

Ja bym tak to zrobił:

SELECT SUM(kartony) 
FROM (
  SELECT DISTINCT CAST(awizacja AS UNSIGNED), kartony
  FROM appt
) dappt

 

komentarz 11 kwietnia 2018 przez hiper007 Stary wyjadacz (11,270 p.)
SELECT SUM(kartony) 
FROM (
  SELECT DISTINCT CAST(awizacja AS UNSIGNED), kartony
  FROM appt
) dappt

rozumiem, że tam gdzie "dappt" powinno być "appt" ;)?

komentarz 11 kwietnia 2018 przez hoktaur Pasjonat (22,250 p.)
Niezupełnie w nawiasie jest tworzona nowa tymczasowa tabela na potrzeby zapytania z tylko niepowtarzających się pól 'DISTINCT' i musi ona mieć nazwę ja dałem dappt a to jest nazwa twojej tabeli appt z literką d -> distinct :)
0 głosów
odpowiedź 11 kwietnia 2018 przez sili94 Nowicjusz (180 p.)

Generalnie dodałem do tego kolumnę o nazwie "wersja", żeby móc odróżnić powtórzone awizacje od unikatowych.
Jeżeli będziesz chciał iść w tą stronę to trzymaj gotowe pytanko.

Select SUM(kartony) 
from appt
where wersja = 1
UNION
Select SUM(kartony) 
from appt
where wersja = 1

zostawiam też link do całości:
http://www.sqlfiddle.com/#!9/eda82e/9

komentarz 11 kwietnia 2018 przez hoktaur Pasjonat (22,250 p.)
W sumie po co te Union?
komentarz 12 kwietnia 2018 przez sili94 Nowicjusz (180 p.)
masz rację, rozpędziłem się :)

UNION nie jest potrzebny czyli kończymy na warunku i wszystko śmiga

Podobne pytania

0 głosów
1 odpowiedź 1,838 wizyt
pytanie zadane 26 maja 2017 w SQL, bazy danych przez Milesq Nałogowiec (32,020 p.)
+1 głos
2 odpowiedzi 493 wizyt
+1 głos
1 odpowiedź 569 wizyt
pytanie zadane 20 października 2021 w PHP przez Jacek Śmiel Użytkownik (510 p.)

92,970 zapytań

141,934 odpowiedzi

321,168 komentarzy

62,299 pasjonatów

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 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...