Manuel111: MySQL-Abfrage

Hallo

Kann mir jemand sagen wie ich folgende abfrage anstelle.

Habe eine Tabelle mit einem Feld und Werten von 1-3.
-------
|Feld1|
-------
|1    |
-------
|2    |
-------
|3    |
-------
|1    |
-------
|2    |
-------
|1    |
-------

Ich brauch jetzt:
1. Die Anzahl der Felder in denen 1 od.2 steht.
2. Die Anzahl der Felder in denen 1 steht.

Wie kann ich das in einer Abfrage machen?

lg.
Manuel

  1. Moin

    Beschäftige dich mit dem MySQL-Befehl COUNT

    Gruß Bobby

    --
    -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
    ### Henry L. Mencken ###
    -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
    ## Viktor Frankl ###
    ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
    1. Ja aber das geht nicht mit mit solcher abfrage. ich kanns mit count machen wenn ich nur eine anzahl haben will aber es funktioniert nicht mit 2.

      lg.

        1. Ja aber ich will die Anzahl wo 1 drinnen steht und die anzahl wo 1 od.2 drinnen steht. das geht nicht so einfach mit der where klausel.

          ich möchte das ganze mit einer abfrage machen können!

          1. Moin

            ich möchte das ganze mit einer abfrage machen können!

              
            SELECT COUNT( * ) anzahl1oder2, (  
            SELECT COUNT( * )  
            FROM TABLE  
            WHERE anzahl = '1'  
            )anzahl1  
            FROM TABLE  
            WHERE anzahl = '1'  
            OR anzahl = '2'
            

            Nun hast du entsprechend 2 Werte: anzahl1 und anzahl1oder2.

            Du musst lernen zu verschachteln und Subquerys zu nutzen.

            Gruß Bobby

            --
            -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
            ### Henry L. Mencken ###
            -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
            ## Viktor Frankl ###
            ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
        2. Moin

          Anders gesagt: Subquerys sind das Zauberwort!

          Gruß Bobby

          --
          -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
          ### Henry L. Mencken ###
          -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
          ## Viktor Frankl ###
          ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
  2. Hallo erstmal,

    Habe eine Tabelle mit einem Feld und Werten von 1-3.

    Feld1
    1

    2
    3

    1
    2

    1

    Ich brauch jetzt:

    1. Die Anzahl der Felder in denen 1 od.2 steht.
    2. Die Anzahl der Felder in denen 1 steht.

    Du brauchst die Anzahl der Felder

    SELECT count(feld1) AS Alle einser<<

    Dannach Von welcher Tabelle das ganze kommt

    FROM Tabellenname

    Nun kommt jetzt die Bedingung

    WHERE feld1=1

    Jetzt noch zum schluss

    GROUP BY feld1; semikolon nicht vergessen

    Die andere Abfrge ist fast das selbe, ich hoffe du hast das Prinzip verstanden, jetzt viel spass beim selber denken.

    Gruß Jonny F.

    1. Moin

      GROUP BY feld1; semikolon nicht vergessen

      Warum willst du gruppieren wenn nur eine COUNT-Variable als Feld abgefragt ist. Hat das Performancevorteile? Ich denke nicht. Oder?

      Ich frage weil das Ergebnis nur 1 Zahl ist mit dieser Abfrage.

      Gruß Bobby

      --
      -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
      ### Henry L. Mencken ###
      -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
      ## Viktor Frankl ###
      ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
      1. Servuts,

        GROUP BY feld1; semikolon nicht vergessen

        Warum willst du gruppieren wenn nur eine COUNT-Variable als Feld abgefragt ist. Hat das Performancevorteile? Ich denke nicht. Oder?

        Ich frage weil das Ergebnis nur 1 Zahl ist mit dieser Abfrage.

        Da geb ich dir vollkommen recht, aber Datenbanken werden oft erweitert bzw. verändert. Drum sag ich:" Vorbeugen ist besser als Nachbeugen :D".

        Gruß Jonny F.

        1. Moin

          Da geb ich dir vollkommen recht, aber Datenbanken werden oft erweitert bzw. verändert. Drum sag ich:" Vorbeugen ist besser als Nachbeugen :D".

          Aber nicht bei einem Query der eine Anzahl holen soll. Da finde ich das Quatsch.

          Gruß Bobby

          --
          -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
          ### Henry L. Mencken ###
          -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
          ## Viktor Frankl ###
          ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
          1. Moin

            Da geb ich dir vollkommen recht, aber Datenbanken werden oft erweitert bzw. verändert. Drum sag ich:" Vorbeugen ist besser als Nachbeugen :D".

            Aber nicht bei einem Query der eine Anzahl holen soll. Da finde ich das Quatsch.

            So gesehen hast du schon recht, ich denk es kommt immer auf die dimension so einer Datenbank an. Bei einer kleinen ist des so schon ok.

            Gruß Jonny F.

            1. Mahlzeit Jonny F.,

              So gesehen hast du schon recht, ich denk es kommt immer auf die dimension so einer Datenbank an. Bei einer kleinen ist des so schon ok.

              Nein, es ist prinzipiell Quatsch, die Ergebnismenge einer Abfrage, die nur genau eine Spalte und eine Zeile enthalten *kann*, gruppieren zu wollen.

              MfG,
              EKKi

              --
              sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
              1. So gesehen hast du schon recht, ich denk es kommt immer auf die dimension so einer Datenbank an. Bei einer kleinen ist des so schon ok.

                Nein, es ist prinzipiell Quatsch, die Ergebnismenge einer Abfrage, die nur genau eine Spalte und eine Zeile enthalten *kann*, gruppieren zu wollen.

                Du siehst es zu engstirnig, es kann immer mal sein das man Attribute bzw. Datensätze abänder oder hinzufügt, stell dir mal vor aus den einzer und zweier werden begriffe und Attribute kommen dazu.

                Des war in dieser Perspektive gemeint.

                Gruß F.

                1. Moin

                  Du siehst es zu engstirnig, es kann immer mal sein das man Attribute bzw. Datensätze abänder oder hinzufügt, stell dir mal vor aus den einzer und zweier werden begriffe und Attribute kommen dazu.

                  Des war in dieser Perspektive gemeint.

                  Stell dir vor, das du da eh die gesamte Abfrage anfassen musst. Gruppierung bei Abfragen die nur 1 Ergebniszeile enthalten können ist einfach Quatsch.

                  Gruß Bobby

                  --
                  -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
                  ### Henry L. Mencken ###
                  -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
                  ## Viktor Frankl ###
                  ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
                2. Mahlzeit Jonny F.,

                  Nein, es ist prinzipiell Quatsch, die Ergebnismenge einer Abfrage, die nur genau eine Spalte und eine Zeile enthalten *kann*, gruppieren zu wollen.

                  Du siehst es zu engstirnig,

                  Nein. Wenn Du weiterhin der Meinung bist: *beweise* es.

                  es kann immer mal sein das man Attribute bzw. Datensätze abänder oder hinzufügt, stell dir mal vor aus den einzer und zweier werden begriffe und Attribute kommen dazu.

                  Und? Was ändert das an der Abfrage an sich? Richtig: gar nichts. Sie wird weiterhin genauso funktionieren. Wenn ich allerdings eine ganze andere Information haben möchte, brauche ich eh eine neue Abfrage (oder muss die bestehende anpassen).

                  Es ist und bleibt Quatsch, eine dermaßen eindeutige und unveränderbare Ergebnismenge gruppieren zu wollen.

                  MfG,
                  EKKi

                  --
                  sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
  3. moin,

    so viel wirbel um eine kleine abfrage...du kannst dir zu nutze machen, dass aggregat funktionen NULL werte nicht berücksichtigen. die frage ist nur, willst du die beiden werte nebeneinander oder untereinander, das eine geht mit UNION ALL, das andere mit CASE.

    SELECT COUNT(*) Anzahl
    FROM tabelle t1
    WHERE t1.feld1= 1
    UNION ALL
    SELECT COUNT(*)
    FROM tabelle t2
    WHERE t2.feld1 IN (1,2)
    ;

    oder aber zwei spalten und ein datensatz als ergebnismenge

    SELECT COUNT(CASE WHEN t1.feld1 = 1 THEN 1 ELSE NULL END) Anzahl1,
           COUNT(CASE WHEN t1.feld1 IN (1,2) THEN 1 ELSE NULL END) Anzahl12,
    FROM tabelle t1
    ;

    Ilja