2017-11-03 4 views
1

Hallo Ich versuche, die folgenden mit einem Datensatz zu tun haben, ich, dass wie folgt aussieht:die Anzahl der jeden eindeutigen Wert Zählen auf eine andere Spalte in Bezug auf (Oracle g11)

letter number 
a 1 
a 2 
a 1 
a 1 
a 3 
a 4 
a 2 
a 4 
b 1 
b 3 
b 4 
b 3 
b 2 
b 5 
b 1 
b 1 

der Datensatz ist das Ergebnis einer Unterabfrage, die ich ausgeführt habe. Ich möchte die Daten formatiert werden wie folgt aussehen, so kann ich Flagge diejenigen, die einen Zähler höher als 3

letter number number_count 
    a 1 3 
    a 2 2 
    a 3 1 
    a 4 2 
    b 1 3 
    b 2 1 
    b 3 2 
    b 4 1 
    b 5 1 

Also für jeden Wert in dem Buchstaben Spalte haben, ich brauche jede eindeutige Zahl in Spalte 2 gezählt und neben dem Wert selbst angezeigt. Ich habe eine Menge suchen, um zu versuchen und zu lösen, und kann keine Variation der Anzahl, Zählung deutlich, über oder anderen Code zu arbeiten, so dass ich entweder das Problem unterschätzt oder eher, ich bin mir nicht sicher Wie formuliere ich meine Suche, damit ich die Antwort finde, nach der ich suche.

Jede Hilfe würde sehr geschätzt werden, verwende ich SQL-Entwickler für den Zugriff auf eine Oracle 11g-Datenbank.

Antwort

0

Also ich denke, das folgende ist, was Sie suchen:

select letter, number, count(letter) as number_count from table group by letter, number; 
+0

Dies scheint genau so getan zu haben, wie ich brauchte, vielen Dank für Ihre Hilfe. Es scheint, dass ich Schwierigkeiten hatte, "Gruppe durch" nicht richtig zu verstehen. –

0

ich zwei weitere Datenleitungen hinzugefügt um ein Beispiel zu zeigen, wo Sie ein Ergebnis haben werden, die gekennzeichnet ist.

WITH 
     sub_q AS (
      SELECT 'a' AS letter_column, 1 AS value_column FROM Dual UNION ALL 
      SELECT 'a', 2 FROM Dual UNION ALL 
      SELECT 'a', 1 FROM Dual UNION ALL 
      SELECT 'a', 1 FROM Dual UNION ALL 
      SELECT 'a', 3 FROM Dual UNION ALL 
      SELECT 'a', 4 FROM Dual UNION ALL 
      SELECT 'a', 2 FROM Dual UNION ALL 
      SELECT 'a', 4 FROM Dual UNION ALL 
      SELECT 'b', 1 FROM Dual UNION ALL 
      SELECT 'b', 3 FROM Dual UNION ALL 
      SELECT 'b', 4 FROM Dual UNION ALL 
      SELECT 'b', 3 FROM Dual UNION ALL 
      SELECT 'b', 2 FROM Dual UNION ALL 
      SELECT 'b', 5 FROM Dual UNION ALL 
      SELECT 'b', 1 FROM Dual UNION ALL 
      SELECT 'b', 1 FROM Dual UNION ALL 
      SELECT 'b', 1 FROM Dual UNION ALL 
      SELECT 'b', 1 FROM DUal 
    ) 

SELECT 
     letter_column, 
     value_column, 
     COUNT(value_column) AS value_count, 
     CASE 
      WHEN COUNT(value_column) > 3 THEN 1 
      ELSE NULL 
     END AS flag_gt_3 
FROM sub_q 
GROUP BY 
     letter_column, 
     value_column 
ORDER BY 
     letter_column, 
     value_column 
; 
+0

Um klar zu sein - mit COUNT (value_column) wird davon ausgegangen, dass jede Zeile einen Wert in der Wertspalte hat.Wenn Sie Zeilen mit NULL in der Wertspalte haben und Sie wollen auch Ergebnisse kennzeichnen, wo ein bestimmter Buchstabe mehr als 3 NULL hat, Sie sollten COUNT (*) anstelle von COUNT (value_column) verwenden. Ein NULL kann nicht ausgewertet werden, weshalb COUNT (value_column) ein anderes Ergebnis liefert – dreamwork

Verwandte Themen