Domanda:
SQL funzione COUNT (due count nella select sulla stessa tabella)?
anonymous
2011-06-21 01:56:21 UTC
ciao a tutti!avrei bisogno di sapere esattamente come funziona il count in sql.
io dovrei visualizzare il numero di libri blu, e il numero di libri rossi che si trovano entrambe nella tabella tipologia, io avevo pensato a una soluzione del genere ma mi sembra alquanto sbagliata:

SELECT COUNT(*) AS N_LIBRI_BLU , COUNT(*) AS N_LIBRI_ROSSI FROM TIPOLOGIA
WHERE TIPOLOGIA="LIBRI_BLU" AND TIPOLOGIA="LIBRI_ROSSI"
GROUP BY N_LIBRI_BLU , N_LIBRI_ROSSI

io credo che il count in questo caso non possa capire a quali delle 2 tipologie mi sto riferendo..
qualcuno mi puo aiutare?
Cinque risposte:
0+ CcDee kk
2011-06-22 06:21:55 UTC
Se vuoi che la tua query restituisca i dati in questo formato:

Tipologia Totale

--------------------------------

Libri_Blu 100

Libri_Rossi 45



Allora la query da scivere è la seguente:



SELECT Tipologia, count(*) AS Totale

FROM Tipologia

WHERE Tipologia IN ("Libri_Blu", "Libri_Rossi")

GROUP BY Tipologia;





Se invece vuoi un layout del tipo:

Libri_Rossi Libri_Blu

---------------------------------------

100 45



la questione è un pò più macchinosa. Dovresti fare una quesry del tipo:

SELECT sum(Rossi) AS Libri_Rossi, sum(Blu) as Libri_Blu

FROM (

SELECT COUNT(*) AS Rossi, 0 Blu

FROM Tipologia

WHERE Tipologia="Libri_Rossi"

UNION

SELECT 0 as Rossi, COUNT(*) AS Blu

FROM Tipologia

WHERE Tipologia="Libri_Blu"

);





Divertiti

Nx
michele_brl
2011-06-21 10:15:09 UTC
Non capisco bene la struttura della tua tabella: la stai chiamando TIPOLOGIA ed al suo interno hai una colonna che si chiama anch'essa TIPOLOGIA? Mi sembra un buon modo per creare pasticci....

Per chiarezza supponiamo che la tabella si chiami 'LIBRI' e che contenga la colonna TIPOLOGIA.



In linea di principio dovrebbe funzionare così:

- raggruppi i record sulla base della tipologia;

- conti gli elementi di ciascun raggruppamento.



Ovvero : SELECT TIPOLOGIA, COUNT(*) AS NUMERO_LIBRI FROM LIBRI GROUP BY TIPOLOGIA



Aggiungo un appunto: la WHERE, scritta come l'hai scritta tu, produrrà sempre un insieme vuoto: stai dicendo di cercare tutti i record in cui TIPOLOGIA vale contemporaneamente (le condizioni sono in AND) sia "LIBRI_ROSSI" che "LIBRI BLU", condizione evidentemente impossibile!
?
2011-06-21 13:34:47 UTC
michele ti ha dato la risposta giusta; la query ti darà il conteggio dei libri di tutte le tipologie, raggruppati per tipologia.

se vuoi restringere le righe restituite ai libri rossi e blu puoi usare la

WHERE TIPOLOGIA="LIBRI_BLU" or TIPOLOGIA="LIBRI_ROSSI"



ma devi usare la OR e non la AND poichè un qualsiasi record non potrà mai essere di tipologia ROSSO e anche BLU (uno dei due)
FB
2011-06-24 15:05:19 UTC
Con due "CASE WHEN".

Puoi fare così:



SELECT SUM(Libri_Blu), SUM(Libri_Rossi)

FROM (

SELECT

CASE WHEN TIPOLOGIA = 'blu' THEN 1

ELSE 0 AS Libri_Blu

CASE WHEN TIPOLOGIA = 'rosso' THEN 1

ELSE 0 AS Libri_Rossi

FROM REPARTO

)



Pivotando la tabella...
♫Arwen♫
2011-06-21 09:02:23 UTC
count lo devi mettere solo una volta.....comunque la query è su una sola tabella?solo su tipologia?devi anche raggrupparli????perche sennò group by che lo metti a fare???



dovrebbe venire così in questo caso:

select count(*) as tipologia.n_libriblu, tipologia.n_librirossi

from tipologia

where ìTIPOLOGIA="LIBRI_BLU" AND TIPOLOGIA="LIBRI_ROSSI"


Questo contenuto è stato originariamente pubblicato su Y! Answers, un sito di domande e risposte chiuso nel 2021.
Loading...