2016-04-18 7 views
0

Ich brauche eine MySQL-Abfrage, um die Ergebnisse zu erhalten, wo es nicht am häufigsten und am wenigsten wiederholte Werte sein wird.MySQL-Abfrage, die Ergebnisse auslassen wird, die zumindest und am häufigsten wiederholt wurden

Was bedeutet das?

Wenn diese MySQL-Abfrage:

SELECT Ocjena,COUNT(*) FROM ocjenjivanje GROUP BY Ocjena; 

kehrt:

enter image description here

ich Abfrage benötigen, die mir die nächsten Ergebnisse geben:

Ocjena 
1 
3 
5 

Dank

+0

Sicherlich 1, 3, 4 !!!!!!!!!!!!!!!!!! – Strawberry

Antwort

0

versuchen Sie dies:

SELECT o.* 
FROM (SELECT Ocjena, COUNT(*) AS c FROM ocjenjivanje GROUP BY Ocjena) AS o 
INNER JOIN (SELECT Min(c) AS l, Max(c) AS h FROM (SELECT Ocjena, COUNT(*) AS c FROM ocjenjivanje GROUP BY Ocjena)) AS m 
ON o.c <> m.l AND o.c <> m.h 
----OR 
--ON o.c NOT IN(m.l, m.h) 

oder Sie diese Abfrage verwenden können:

SELECT Ocjena, c 
FROM 
(SELECT o.*, @min:=IF(@min > o.c, o.c, @min) AS l, @max:=IF(@max < o.c, o.c, @max) AS h 
    FROM (SELECT Ocjena, COUNT(*) AS c FROM ocjenjivanje GROUP BY Ocjena) AS o 
    , (select @max:=0, @min:=32000) AS m) AS x 
WHERE c NOT IN(l, h) 
+0

Danke. # 1064 - Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Server-Version für die richtige Syntax in der Nähe von 'ON oc <> ml UND oc <> mh LIMIT 0, 25' bei Zeile 4 – PottaG

+0

korrigiert fehlt ')' –

+0

Ich werde Ihre Antwort fällig akzeptieren zu Ihrer Anstrengung, aber das gibt mir nicht das erwartete Ergebnis. Hier ist, wie ich es löse. – PottaG

0

Hier ist meine Lösung.

Ich weiß nicht, kann ich es besser machen, professioneller auszusehen oder schneller zu sein oder so etwas.

SELECT * FROM  `Ocjenjivanje` WHERE Ocjena != ( SELECT Ocjena 
FROM  `Ocjenjivanje` 
GROUP BY `Ocjena` 
ORDER BY `Ocjena` DESC 
LIMIT 1) AND OCjena != (SELECT Ocjena 
FROM  `Ocjenjivanje` 
GROUP BY `Ocjena` 
ORDER BY `Ocjena` ASC 
LIMIT 1) 
GROUP BY `Ocjena` 
+0

aber diese Abfrage gibt Ocjena {2, 3, 4} zurück, nicht die "meist und am wenigsten wiederholten Werte" ... –

0

Sie können wie folgt aus Abfrage in Ihrer Antwort gepostet Ergebnis erhalten (aber es wird keine Zeilen in Frage erwartet zurück), eine dieser Abfrage:

SELECT o.* 
FROM (SELECT Ocjena, COUNT(*) AS c FROM ocjenjivanje GROUP BY Ocjena) AS o 
INNER JOIN (SELECT Min(Ocjena) AS l, Max(Ocjena) AS h FROM ocjenjivanje) AS m 
ON o.Ocjena <> m.l AND o.Ocjena <> m.h 

SELECT Ocjena, COUNT(*) AS c 
FROM ocjenjivanje AS o 
WHERE o.Ocjena <> (SELECT Min(Ocjena) FROM ocjenjivanje) 
AND o.Ocjena <> (SELECT Max(Ocjena) FROM ocjenjivanje) 
GROUP BY Ocjena 

SELECT Ocjena, COUNT(*) AS c 
FROM ocjenjivanje AS o 
WHERE o.Ocjena NOT IN (SELECT Min(Ocjena) FROM ocjenjivanje UNION SELECT Max(Ocjena) FROM ocjenjivanje) 
GROUP BY Ocjena 
Verwandte Themen