Toon posts:

[SQL] Lastige Query Met SUM en COUNT

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik kom nog niet uit deze query:

SELECT afdeling.afd, afdeling.afdnaam, artikel.kleur, COUNT(artikel.art)
FROM
verkart
INNER JOIN verkoop ON (verkart.art = verkoop.art) AND
(verkart.afd = verkoop.afd)
INNER JOIN afdeling ON (verkart.afd = afdeling.afd)
INNER JOIN artikel ON (verkart.art = artikel.art)
WHERE (artikel.kleur = 'geel')
GROUP BY afdeling.afd

Ik krijg hierbij als result het volgende:
+-----+--------------+-------+--------------------+
| afd | afdnaam | kleur | COUNT(artikel.art) |
+-----+--------------+-------+--------------------+
| 02 | Huishoud art | geel | 2 |
| 09 | Kleding | geel | 4 |
| 14 | Elektra | geel | 2 |
| 18 | Fotografie | geel | 1 |
| 23 | Stoffering | geel | 7 |
| 44 | Hobby | geel | 20 |
+-----+--------------+-------+--------------------+

Mijn vraag is nu hoe ik de afdelingen kan selecteren die voldoen aan de voorwaarde dat zij meer dan 1/10 van deze gele artikelen verkopen. Het totaal van alle counts is dus 36, waardoor ik de afdelingen moet hebben die meer dan 3,6 hebben als count. Ik heb nu als hulpsteuntje de count in de tabel erbij gezet, want ik mag natuurlijk niet in de HAVING in gaan vullen dat het meer als 3,6 is.

Ik moet iets gaan gebruiken als count(artikel.art) > SUM(COUNT(artikel.art))/10, maar dat lukt dus niet. 8)7

  • watzie
  • Registratie: Juni 2001
  • Laatst online: 21-04 07:06
Voor welk DBMS (welk SQL dialekt bijv.) en moet het allemaal in 1 query of mag het ook bijv. een stored procedure zijn?

  • watzie
  • Registratie: Juni 2001
  • Laatst online: 21-04 07:06
Bij gebrek aan info (en gebrek aan een db in de buurt) maar wat pseudo sql

probeer eens iets in deze richting? (syntax moet je zelf even vervolmaken), key zit 'm in de sum(1) die oplopend moet gaan tellen als ik niet helemaal gek ben }:O
Wel lastig hoor uit je blote hoofd sql'en

SELECT afdeling.afd, afdeling.afdnaam, artikel.kleur, COUNT(artikel.art) as hoeveel, sum(1) as totaal
....
HAVING hoeveel > (totaal / 10 )

  • Rath
  • Registratie: April 2002
  • Laatst online: 18-02 10:59
SELECT afdeling.afd, afdeling.afdnaam, artikel.kleur, COUNT(artikel.art) as aantal
FROM verkart
INNER JOIN verkoop ON (verkart.art = verkoop.art) AND
(verkart.afd = verkoop.afd)
INNER JOIN afdeling ON (verkart.afd = afdeling.afd)
INNER JOIN artikel ON (verkart.art = artikel.art)
WHERE lower(art.kleur) = 'geel'
GROUP BY afdeling.afd
HAVING aantal >= (SELECT SUM(COUNT(artikel.art))/10
FROM artikel
WHERE artikel.kleur = 'geel')

Kleine poging van mij, heb geen idee of dit volledig klopt (werk normaal met Oracle)

I don't believe we have a society, we have a colony of animals


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-05 14:03

curry684

left part of the evil twins

Rath's suggestie klopt wel ongeveer en zou in SQL Server ook moeten werken: subquery is the way to go.

Wat is overigens het idee achter die dubbele join-condition op de eerste inner join? Ziet er erg ranzig uit :X

Professionele website nodig?


Verwijderd

Topicstarter
Het gaat hier trouwens om MySQL v.5. Ik heb de query van Rath geprobeerd, maar krijg errors zoals: Invalid use of group by function. Is het eigenlijk mogelijk om een SUM van een COUNT te nemen, en hoe zou ik dat moeten neerzetten?, want ik krijg altijd errors ermee.

  • Rath
  • Registratie: April 2002
  • Laatst online: 18-02 10:59
SELECT SUM(COUNT(artikel.art))/10
FROM artikel
WHERE artikel.kleur = 'geel'

wat krijg je als je deze query uitvoert? zou kunnen dat je hierop nog een group by moet plaatsen op artikel.art :)

I don't believe we have a society, we have a colony of animals

Pagina: 1