Zählen Sie, wie viele Zeilen denselben Wert haben

78

Wie schreibe ich eine SQL-Abfrage, um die Gesamtzahl eines bestimmten num-Werts in der num-Spalte einer Tabelle zu zählen?

zB wählen wo num = 1

Ergebnis: 2

+-----+-----+
| NAME | NUM |
+=====+=====+
| SAM  |  1  | 
+-----+-----+
| BOB  |  1  |
+-----+-----+
| JAKE |  2  | 
+-----+-----+  
| JOHN |  4  | 
+-----+-----+
user2273278
quelle
@ Randomstring Haben Sie einen Hinweis auf meine Antwort, und Geige auch
Prahalad Gaggar
@Luv, ich habe deine Antwort positiv bewertet. Diese Frage ist aufgrund der Mehrdeutigkeit und Einfachheit ein Cluster # @ $ @.
Nekromant
Was motiviert so viele doppelte Antworten auf eine so einfache, aber schlecht gestellte Frage? seufz ... muss vermeiden, in den Wurstherstellungsprozess zu schauen!
Nekromant

Antworten:

127

Versuchen

SELECT NAME, count(*) as NUM FROM tbl GROUP BY NAME

SQL FIDDLE

Meherzad
quelle
4
Wenn es notwendig ist, auch nach einer bestimmten Zählnummer herauszufiltern, sagen wir nur weniger als 10 oder mehr als 25, können Sie HAVINGOperatoren wieGROUP BY ... HAVING COUNT(*) > ...
BotanMan
17

Wenn Sie das Ergebnis für alle Werte von haben möchten NUM:

SELECT `NUM`, COUNT(*) AS `count` 
FROM yourTable
GROUP BY `NUM`

Oder nur für eine bestimmte:

SELECT `NUM`, COUNT(*) AS `count` 
FROM yourTable
WHERE `NUM`=1
Sirko
quelle
13

FÜR SPEZIFISCHE NUMMER:

SELECT COUNT(1) FROM YOUR_TABLE WHERE NUM = 1

FÜR ALLE NUMEN:

SELECT NUM, COUNT(1) FROM YOUR_TABLE GROUP BY NUM
Dhwani
quelle
10
SELECT 
   COUNT(NUM) as 'result' 
FROM 
   Table1 
GROUP BY 
   NUM 
HAVING NUM = 1
Deval Shah
quelle
@necromancer bitte erklären, warum hier gebraucht wird? Es macht keinen Sinn, in diesem Zusammenhang zu haben. Wenn er es zum Vergleichen des Aggregats verwendete, war es eine positive Bewertung wert.
Nick N.
1
@ NickN. having num = 1ist gleichbedeutend mit where num = , also ist es nicht falsch und es ist nicht "macht keinen Sinn". Ich fand es erfrischend anders, es so zu machen als konventioneller where. Die Äquivalenz ist auf den ersten Blick nicht offensichtlich, daher würde ich empfehlen, sie selbst auszuprobieren.
Nekromant
@necromancer Ich sehe es immer noch nicht, da wherees das gleiche ist, warum verwenden having?
Nick N.
5
@ NickN. havingist für Kriterien auf Gruppenebene; whereist für Kriterien auf Zeilenebene. Sie können im Allgemeinen nicht ausgetauscht werden. In diesem speziellen Grenzfall können sie jedoch ausgetauscht werden. Daher ist die Ausgabe gleich. Aber philosophisch denke ich an NUMein Kriterium auf Gruppenebene, da die Gruppe von NUMselbst durchgeführt wird. Deshalb schätze ich havingstatt where. Sie werden mein abstraktes Anliegen wahrscheinlich nicht zugunsten eines anderen Anliegens schätzen, sondern es nur erklären, damit Sie nicht glauben, dass ich total verrückt bin.
Nekromant
1
@necromancer, danke für die ausführliche Erklärung. Es macht jetzt viel Sinn. Danke für eine gute Diskussion!
Bizi
3

Versuchen Sie diese Abfrage

select NUM, count(1) as count 
from tbl 
where num = 1
group by NUM
--having count(1) (You condition)

SQL FIDDLE

Prahalad Gaggar
quelle
@randomstring Bitte beziehen Sie sich auf die Geige. :)
Prahalad Gaggar
danke aber nicht nötig - ich verdiene mir meinen ruf auf die schwierige weise und außerdem erkennt und beseitigt das system sie trotzdem!
Nekromant
1
SELECT sum(num) WHERE num = 1;
0xAli
quelle
Meinst du nicht count?
Nekromant
Nein, Sir, afaik er will die Summe der Werte, nicht das Auftreten von Zahlen.
0xAli
Hey, du hast recht! Alter, es gibt eine einzige richtige Antwort, diese!
Nekromant
1
@randomstring Es ist völlig falsch Abfrage. 1.Was ist, wenn OP will where num=2. 2Außerdem wird diese Abfrage zurückkehren error, da sie das nicht angibt tablename.
Prahalad Gaggar
@Luv, ich stimme zu. Diese Frage ist ein Chaos.
Nekromant
1

SELECT SUM(IF(your_column=3,1,0)) FROM your_table WHERE your_where_contion='something';

zB für Sie fragen: -

SELECT SUM(IF(num=1,1,0)) FROM your_table_name;

user8567224
quelle
-2

Verwenden Sie diese Abfrage, um Ihre Ausgabe zu erhalten:

select 
  t.name
  ,( select 
       count (*) as num_value 
     from Table 
      where num =t.num) cnt 
from Table t;
Rohit Sahu
quelle
Hallo ! Könnten Sie bitte die Bedeutung von "o / p" angeben?
toshiro92
1
@ toshiro92 normalerweise steht das für OutPut
Tomerikoo