2017-06-28 8 views
0

Ich habe eine Tabelle mit zwei Spalten: id, tagMySQL Schleife über jeden Wert in einer Spalte

Ich mag mit id und count_of_tag eine Ergebnistabelle erhalten, aber mit spezieller Zählung Anforderung wie folgt aus (verschiedene Tags zählen für jede ID mit id = 1 immer im Lieferumfang enthalten):

jedes i in ID:

select id, count(distinct tag) from table where id in (1,i); 

Wie kann ich das tun? Ich habe nur Erfahrung in ausgewählten Anweisungen und neue gespeicherte Prozedur/Funktionen.

---- Beispieldaten -----

id |tag 
1 | A 
1 | B 
1 | C 
2 | A 
2 | D 
3 | C 
3 | D 
3 | E 

---- ---- Wunschergebnis

id |count 
1 | 3 
2 | 4 
3 | 5 
+0

Bearbeiten Sie Ihre Frage und Beispieldaten und die gewünschten Ergebnisse liefern. –

Antwort

0

Kommen Sie mit einer Lösung auf mich:

select 
    id, count(distinct tag) 
from 
    (select * from table 
    union 
    select * from 
    (select distinct id from table where id<>1) as t1 
    CROSS JOIN 
    (select distinct tag from table where id=1) as t2) as final 
group by id; 
0

Sie scheinen "1" als ein zu wollen, gehören Tag, ob es vorhanden ist oder nicht. Wie wäre es damit?

select id, 
     (count(distinct tag) + (1 - max(tag = 1))) 
from table 
group by id; 

Die 1 - max(tag = 1) 0 zurück, wenn Tag 1 vorhanden ist und 0 ist, wenn es nicht ist.

+0

Nr. 1 ist kein Tag, es ist eine ID (eine spezielle). Sagen wir, wenn i = 3 ist, möchte ich verschiedene Tags mit id = 1 oder 3 zählen. Was auch immer ich bin, ich möchte die verschiedenen Tags mit id = 1 oder i zählen. – user130893

+0

Bearbeitet. Könnten Sie einen Blick darauf werfen? – user130893

+0

@ Benutzer130893. . . Ich habe keine Ahnung was du meinst. Ich würde vorschlagen, diese Frage zu löschen und eine andere mit Beispieldaten und gewünschten Ergebnissen zu fragen. –

Verwandte Themen