2016-03-27 4 views
0

So habe ich die folgende normale Abfrage:Ist es möglich, eine Unterabfrage IN-Klausel über ein Aggregat zu verwenden?

SELECT 
    someCol, 
    COUNT(*), 
    GROUP_CONCAT(myTableID SEPARATOR ',') 
FROM myTable 
GROUP BY someCol 

Ich mag würde die Liste des myTableIDs in der dritten Spalte in einer Klausel der Unterabfrage verwenden. Die folgende nicht-Arbeits Abfrage verdeutlicht dies:

# this does not work 
SELECT 
    someCol, 
    COUNT(*), 
    ( SELECT COUNT(mySubTable.*) 
     FROM mySubTable 
     WHERE mySubTable.foreignID IN GROUP_CONCAT(myTable.myTableID SEPERATOR ',') 
    ) AS FOREIGN_COUNT 
FROM myTable GROUP BY someCol 

Der IN GROUP_CONCAT() Teil nicht funktioniert, weil die GROUP_CONCAT() ist nur eine Zeichenfolge mit Kommas Rückkehr nicht eine aktuelle Liste von IDs oder einer Unterabfrage.

Meine Frage ist, ist es möglich, die aggregierte Liste von myTableIDs als Teil der IN-Klausel der Unterabfrage zu verwenden?

+0

Ich glaube, Sie brauchen diese Informationen in einer Variablen zu erhalten. Machen Sie eine vorbereitete Aussage in der Sprache Ihrer Wahl – Drew

+0

Ich bin fast peinlich, Ihnen dies zu zeigen, aber es ist etwas verwandt. Schauen Sie sich [Anhang C] an (http://stackoverflow.com/a/34015333) – Drew

+0

Was genau versuchen Sie im einfachen Englisch? Was ist das eigentliche Ziel? – Bohemian

Antwort

1

Verwenden Sie eine ‚SUM‘ -Funktion tun, eine solche Aufgabe:

SELECT 
    someCol, 
    COUNT(*), 
    GROUP_CONCAT(myTableID SEPARATOR ','), 
    SUM( 
     (select COUNT(*) FROM mySubTable 
      WHERE mySubTable.foreignID = myTable.myTableId) 
     ) 
FROM myTable 
GROUP BY someCol; 
+0

Das ist perfekt für meine Zwecke. Vielen Dank! – ericcccc

Verwandte Themen