mysql Unterabfrage where-und group by
Lerne ich mysql-Handbuch:
http://dev.mysql.com/doc/refman/5.6/en/example-maximum-column-group-row.html
und ich bin verwirrt mit der "wo.s1.Artikel = s2.Artikel " Teil, was ist das?
Task: For each article, find the dealer or dealers with the most expensive price.
+---------+--------+-------+
| article | dealer | price |
+---------+--------+-------+
| 0001 | A | 3.45 |
| 0001 | B | 3.99 |
| 0002 | A | 10.99 |
| 0003 | B | 1.45 |
| 0003 | C | 1.69 |
| 0003 | D | 1.25 |
| 0004 | D | 19.95 |
+---------+--------+-------+
SELECT article, dealer, price
FROM shop s1
WHERE price=(SELECT MAX(s2.price)
FROM shop s2
WHERE s1.article = s2.article);
+---------+--------+-------+
| article | dealer | price |
+---------+--------+-------+
| 0001 | B | 3.99 |
| 0002 | A | 10.99 |
| 0003 | C | 1.69 |
| 0004 | D | 19.95 |
+---------+--------+-------+
Ich versuche zu schreiben, der ähnlich wie code:
SELECT sex, name, birthday
From user
Where birthday=(SELECT MAX(birthday)
FROM user
group by sex);
Aber meine Ausgänge den Fehler: subquery wieder mehr als 1 Zeile, warum?
- Ich bin mir nicht sicher, ich mag mich irren, aber ich denke, das ist, weil
subquery returns more than 1 row
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Original Abfrage aufgerufen wird eine korrelierte Unterabfrage. Die
WHERE
- Klausel in der Unterabfrage beschränkt die maximale gefunden, um nur die Artikel, entspricht die Zeile verarbeitet, die von der äußeren Abfrage.In Ihrer Anfrage, haben Sie sich nicht
WHERE
- Klausel, so dass Sie verarbeitet alles in der Tabelle. Es gibt dann die Ergebnisse gruppiert nach Geschlecht. Ich nehme an, es gibt zwei Geschlechter in Ihrer Tabelle, also es gibt eine Zeile mit dem maximum für Männer, und eine weitere Zeile, in der der maximale für Frauen. AberWHERE price = (<subquery>)
erfordert die Unterabfrage gibt nur ein einziges Ergebnis, weil=
kann nur verwendet werden, mit einzelnen Werten.Können Sie
IN
statt=
zum Spiel gegen mehrere Werte zurückgegeben. Dies ist wahrscheinlich nicht das, was Sie wollen, aber Sie haben nicht beschrieben, was Sie möchten, dass Ihre Abfrage so zu tun es ist schwer zu sagen.Um die jüngste person von jedem Geschlecht, Sie können schreiben Sie eine korrelierte Unterabfrage, wie in der Anleitung:
verwenden oder verwenden Sie einen join mit einer Unterabfrage gruppiert:
=
erfordert nur eine Sache, zu vergleichen mit. Wenn Sie wollen, zu korrelieren, die Sie benötigen, um einWHERE
- Klausel.