Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SQL][MySQL] Select COUNT(*)
Spyder
post
Post #1





Grupa: Zarejestrowani
Postów: 269
Pomógł: 7
Dołączył: 12.10.2006
Skąd: Newcastle Upon Tyne

Ostrzeżenie: (0%)
-----


Witam

Mam taki problem

  1. SELECT COUNT('value') FROM orders WHERE opid IN (SELECT DISTINCT opid FROM orders)


Ogulnie mam takie cos:

ID | OPID | VALUE |
1|AAA|20
2|AAA|20
3|ABA|45
4|ACA|44
5|ADA|56

Chce zeby kount podliczyl mi wszystkie wartosci ale jak jest w przypadku AAA jesli wystepuje rekord 2x to zeby bral wartosc pierwsza a ignorowal kolejne. Cos jak Group BY, albo UNIQUE

Dzieki

Ten post edytował Spyder 21.08.2009, 16:02:33
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 16)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




  1. ... count(DISTINCT nazwapola)...
Go to the top of the page
+Quote Post
erix
post
Post #3





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Ogulnie mam takie cos:

Ogólnie, to nie łaska włączyć sprawdzania pisowni?

Cytat
Chce zeby kount podliczyl mi wszystkie wartosci ale jak jest w przypadku AAA jesli wystepuje rekord 2x to zeby bral wartosc pierwsza a ignorowal kolejne

AFAIK:
  1. SELECT DISTINCT
Go to the top of the page
+Quote Post
Spyder
post
Post #4





Grupa: Zarejestrowani
Postów: 269
Pomógł: 7
Dołączył: 12.10.2006
Skąd: Newcastle Upon Tyne

Ostrzeżenie: (0%)
-----


Dzieki za odp ale po pierwsze sie domyslilem ze nie ma byc COUNT tylko SUM, a dodatkowo wartosci VALUE moga byc takie same ale dla innego OPID.

Czyli nie moze byc DISTICT na nazwe pola value bo bedzie mi bralo unikalne value:

poprawnie jest tak:

  1. SELECT SUM(value) FROM orders WHERE STATUS <> 'W'


Tyle ze teraz trzeba dodac gdzie wartosc opid jest unikalna i nie moze byc group by.
Go to the top of the page
+Quote Post
erix
post
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
moga byc takie same ale dla innego OPID.

A tak po polsku, to co chcesz osiągnąć?
Go to the top of the page
+Quote Post
Spyder
post
Post #6





Grupa: Zarejestrowani
Postów: 269
Pomógł: 7
Dołączył: 12.10.2006
Skąd: Newcastle Upon Tyne

Ostrzeżenie: (0%)
-----


To jeszcze raz jak mam np:


ID | OPID | VALUE
1|AAA|10
2|AAA|10
3|AAA|10
4|BBB|10
5|CCC|10
6|DDD|10
7|DDD|10

Przy moim zapytaniu pokaze mi 70 a ja chce zeby pokazalo mi 40...

Dzieki
Go to the top of the page
+Quote Post
erix
post
Post #7





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




No to napisałem:
  1. SELECT DISTINCT
Go to the top of the page
+Quote Post
Spyder
post
Post #8





Grupa: Zarejestrowani
Postów: 269
Pomógł: 7
Dołączył: 12.10.2006
Skąd: Newcastle Upon Tyne

Ostrzeżenie: (0%)
-----


Nie moge dac DISTINCT i SUM w jedym... Jak mam zapisac to zeby DISTINCT bylo na OPID a sumowalo value?(IMG:style_emoticons/default/questionmark.gif) (IMG:style_emoticons/default/questionmark.gif)

Ten post edytował Spyder 21.08.2009, 16:50:19
Go to the top of the page
+Quote Post
erix
post
Post #9





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




  1. SELECT sum(c2) FROM asd WHERE c3 IN(SELECT DISTINCT c3 FROM asd)
Go to the top of the page
+Quote Post
Spyder
post
Post #10





Grupa: Zarejestrowani
Postów: 269
Pomógł: 7
Dołączył: 12.10.2006
Skąd: Newcastle Upon Tyne

Ostrzeżenie: (0%)
-----


To teraz tak jak kukniesz na poczatek tego postu to dokladnie tak mialem tyle ze z COUNT co odpisalem zeby zamienic na SUM czyli teraz mam to samo co bylo na poczatku tyle ze to nie dziala i zwraca mi ta sama wartosc (IMG:style_emoticons/default/sad.gif) co bez DISTINCT


  1. SELECT SUM(value) FROM orders WHERE STATUS <> 'W' AND opid IN (SELECT DISTINCT opid FROM orders )


nie przejmuj sie statusem bo to dodatkowa zmienna nie majaca zwiazku z problemem
Go to the top of the page
+Quote Post
erix
post
Post #11





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
co odpisalem zeby zamienic na SUM czyli teraz mam to samo co bylo na poczatku tyle ze to nie dziala i zwraca mi ta sama wartosc

Fakt...

  1. SELECT sum(c2) FROM (SELECT c2 FROM asd GROUP BY c3) x
Go to the top of the page
+Quote Post
Spyder
post
Post #12





Grupa: Zarejestrowani
Postów: 269
Pomógł: 7
Dołączył: 12.10.2006
Skąd: Newcastle Upon Tyne

Ostrzeżenie: (0%)
-----


  1. SELECT SUM(value) FROM orders WHERE STATUS <> 'W' AND opid IN (SELECT value FROM orders GROUP BY opid)


Jeszcze nie to bo wyswietla za mala wartosc...

Oki odezwe sie za 1h...

Jakies pomysly (IMG:style_emoticons/default/questionmark.gif) ?
Go to the top of the page
+Quote Post
erix
post
Post #13





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A zrobiłeś w ogóle, jak mówiłem? U mnie wyświetla poprawnie...
Go to the top of the page
+Quote Post
Spyder
post
Post #14





Grupa: Zarejestrowani
Postów: 269
Pomógł: 7
Dołączył: 12.10.2006
Skąd: Newcastle Upon Tyne

Ostrzeżenie: (0%)
-----


Cytat(erix @ 21.08.2009, 19:18:06 ) *
A zrobiłeś w ogóle, jak mówiłem? U mnie wyświetla poprawnie...



pewnie ze zrobilem i testowalem tu jest zapytanie do phpMyadmina:

  1. SELECT sum(value) FROM test WHERE opid IN(SELECT value FROM test GROUP BY opid)


Tu jest baza:

  1. CREATE TABLE `test` (
  2. `id` int(10) NOT NULL AUTO_INCREMENT,
  3. `opid` varchar(10) NOT NULL,
  4. `value` float NOT NULL,
  5. PRIMARY KEY (`id`)
  6. ) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;
  7.  
  8. --
  9. -- Dumping data for table `test`
  10. --
  11.  
  12. INSERT INTO `test` (`id`, `opid`, `value`) VALUES (1, 'AAA', 10),
  13. (2, 'AAA', 10),
  14. (3, 'AAA', 10),
  15. (4, 'BBB', 10),
  16. (5, 'CCC', 10),
  17. (6, 'DDD', 10),
  18. (7, 'DDD', 10);

Go to the top of the page
+Quote Post
thek
post
Post #15





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Mam nadzieję, że to jest to, o co Ci chodzi (IMG:style_emoticons/default/winksmiley.jpg)
  1. SELECT sum(value) FROM test WHERE id IN( SELECT min(id) FROM test GROUP BY opid)

Szukam najniższego id, spośród wszystkich z takim samym opid, a potem sumuję value z tak uzyskanych rekordów (IMG:style_emoticons/default/smile.gif) Najlepiej zauważyć liczenie gdy zrobisz każdy rekord z inna wartością (IMG:style_emoticons/default/winksmiley.jpg)
  1. CREATE TABLE `test` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `opid` varchar(3) NOT NULL,
  4. `value` int(3) NOT NULL,
  5. PRIMARY KEY (`id`),
  6. KEY `opid` (`opid`)
  7. )
  8.  
  9. INSERT INTO `test` (`id`, `opid`, `value`) VALUES
  10. (1, 'AAA', 10),
  11. (2, 'AAA', 15),
  12. (3, 'AAA', 20),
  13. (4, 'BBB', 25),
  14. (5, 'CCC', 30),
  15. (6, 'DDD', 35),
  16. (7, 'DDD', 40);

Sprawdź wtedy podzapytanie
  1. SELECT min(id) FROM test GROUP BY opid

a zobaczysz, że pokazuje zawsze rekord o najniższym id, czyli de facto ten, w którym ta wartość wystąpiła po raz pierwszy. W takim wypadku jak mój powyższy pokaże Ci rekordy 1, 4, 5, 6 i wyliczy sumę jako 100. A o ten właśnie chyba chodzi i taki być powinien bo 10+25+30+35 =100

Ten post edytował thek 21.08.2009, 23:28:32
Go to the top of the page
+Quote Post
Spyder
post
Post #16





Grupa: Zarejestrowani
Postów: 269
Pomógł: 7
Dołączył: 12.10.2006
Skąd: Newcastle Upon Tyne

Ostrzeżenie: (0%)
-----


I tu masz mistrza dzieki wielkie bo meczylem sie juz troche (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
thek
post
Post #17





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Nie ma sprawy... Czasem człowiek wpada w rutynę i sam tego doświadczam. Tu literówka, tam coś się zapomni i kłopot gotowy. Ja też nie jestem guru programowania, ale gdzie mogę to pomogę (IMG:style_emoticons/default/smile.gif) Szkoda tylko, że tam gdzie ja już nie mogę to niewielu może mi pomóc (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 03:04