Ich habe einen Datensatz, in dem ein Kunde gefragt wird, wie viele Haustiere er beispielsweise hat. Gibt es eine Möglichkeit, mit einer Abfrage die verschiedenen Werte (1,2,3 usw.) zu zählen? Vielen Dank!
+----------+------+
| Customer | Pets |
+----------+------+
| 20 | 2 |
| 21 | 3 |
| 22 | 3 |
| 23 | 2 |
| 24 | 4 |
+----------+------+
Was ich will, ist eine Liste mit folgenden Worten:
- 2 hatten 2 Haustiere
- 2 hatten 3 Haustiere
- Ich hatte 4 Haustiere
Ok, ich habe meine vorherige Antwort gelöscht, weil es schließlich nicht das war, wonach Willlangford suchte, aber ich habe darauf hingewiesen, dass wir vielleicht alle die Frage falsch verstanden haben.
SELECT DISTINCT...
Anfangs dachte ich auch an die Sache, aber es schien mir zu seltsam, dass jemand wissen musste, wie viele Menschen eine andere Anzahl von Haustieren hatten als die anderen ... deshalb dachte ich, dass die Frage vielleicht nicht klar genug war.Nun, da die eigentliche Fragebedeutung geklärt ist und eine Unterabfrage dafür einen ziemlichen Aufwand darstellt, würde ich vorzugsweise eine
GROUP BY
Klausel verwenden.Stellen Sie sich vor, Sie haben den Tisch
customer_pets
so:+-----------------------+ | customer | pets | +------------+----------+ | customer1 | 2 | | customer2 | 3 | | customer3 | 2 | | customer4 | 2 | | customer5 | 3 | | customer6 | 4 | +------------+----------+
dann
SELECT count(customer) AS num_customers, pets FROM customer_pets GROUP BY pets
würden zurückkehren:
+----------------------------+ | num_customers | pets | +-----------------+----------+ | 3 | 2 | | 2 | 3 | | 1 | 4 | +-----------------+----------+
wie du es brauchst.
quelle
count(customer)
ist überflüssig. Sie können nur verwenden:SELECT COUNT(*) AS num_customers, pets FROM customer_pets GROUP BY pets
customer
dannCOUNT(customer)
werden sie nicht zählen, währendCOUNT(*)
oderCOUNT(pets)
will. In diesem Fall hängt es davon ab, welches Verhalten Sie bevorzugen. Auf jeden Fall, auch wenn es die meiste Zeit keinen Unterschied macht, möchte ich die Spalte angeben, die ich für die Lesbarkeit zählen möchte.Ich finde diesen Link ziemlich gut.
Beispielausgabe von diesem Link:
mysql> SELECT cate_id,COUNT(DISTINCT(pub_lang)), ROUND(AVG(no_page),2) -> FROM book_mast -> GROUP BY cate_id; +---------+---------------------------+-----------------------+ | cate_id | COUNT(DISTINCT(pub_lang)) | ROUND(AVG(no_page),2) | +---------+---------------------------+-----------------------+ | CA001 | 2 | 264.33 | | CA002 | 1 | 433.33 | | CA003 | 2 | 256.67 | | CA004 | 3 | 246.67 | | CA005 | 3 | 245.75 | +---------+---------------------------+-----------------------+ 5 rows in set (0.00 sec)
quelle
Sie können dies verwenden:
select count(customer) as count, pets from table group by pets
quelle
SELECT CUSTOMER, COUNT(*) as PETS FROM table_name GROUP BY CUSTOMER;
quelle