Порахуйте, скільки рядків мають однакове значення


80

Як написати SQL-запит для підрахунку загальної кількості певного значення num в стовпці num таблиці.

наприклад, виберіть де num = 1

результат: 2

+-----+-----+
| NAME | NUM |
+=====+=====+
| SAM  |  1  | 
+-----+-----+
| BOB  |  1  |
+-----+-----+
| JAKE |  2  | 
+-----+-----+  
| JOHN |  4  | 
+-----+-----+

@randomstring Зверніться до моєї відповіді та теж до скрипки
Prahalad Gaggar

@Luv, я підтримав вашу відповідь. це питання являє собою кластер # @ $ @ через неоднозначність та простоту.
некромант

що спонукає стільки дублікатів відповідей на таке просте, але неправильно поставлене питання? зітхайте ... потрібно уникати вивчення процесу виготовлення ковбаси!
некромант

Відповіді:


131

Спробуйте

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

SQL FIDDLE


4
Якщо необхідно відфільтрувати також за конкретним числом підрахунку, скажімо, отримайте лише менше 10 або більше 25, ви можете використовувати HAVINGоператор, наприкладGROUP BY ... HAVING COUNT(*) > ...
BotanMan

17

Якщо ви хочете отримати результат для всіх значень NUM:

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

Або лише для одного конкретного:

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

13

ЗА КОНКРЕТНИМ НОМЕРОМ:

SELECT COUNT(1) FROM YOUR_TABLE WHERE NUM = 1

ДЛЯ ВСІХ НОМЕРІВ:

SELECT NUM, COUNT(1) FROM YOUR_TABLE GROUP BY NUM

10
SELECT 
   COUNT(NUM) as 'result' 
FROM 
   Table1 
GROUP BY 
   NUM 
HAVING NUM = 1

@necromancer, будь ласка, поясніть, навіщо це потрібно тут? немає сенсу використовувати маючи в цьому контексті. Якщо він використовував його для порівняння сукупності, то це було гідно.
Нік Н.

1
@NickN. having num = 1еквівалентно where num = , тому це не помилково і не "не має сенсу". Я думав, що це освіжаюче по-іншому робити це таким чином, а не більш звичним where. Еквівалентність не очевидна з першого погляду, тому я б радив спробувати її самостійно.
necromancer

@necromancer Я все ще не бачу цього, оскільки whereце те саме, навіщо використовувати having?
Nick N.

5
@NickN. havingвідповідає критеріям групового рівня; whereдля критеріїв рівня рядка. Вони взагалі не можуть бути замінені. Однак у цьому спеціальному межовому випадку вони можуть міняти місцями. Тому результат однаковий. Але, філософськи, я вважаю NUMце критеріями на рівні групи, оскільки група NUMсама робиться на собі. Тому я ціную havingзамість where. Ви, мабуть, не оціните мого абстрактного занепокоєння на користь якогось іншого занепокоєння, але просто пояснивши це, щоб ви не думали, що я зовсім божевільний.
некромант

1
@necromancer, дякую, що надав детальні пояснення. Зараз це має великий сенс. Дякую за гарну дискусію!
bizi

3

Спробуйте цей запит

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

SQL FIDDLE


@randomstring Будь ласка, зверніться до скрипки. :)
Прахалад Гаггар,

спасибі, але не потрібно - я заробляю свою репутацію важким способом, крім того система виявляє та усуває їх незалежно!
некромант

1
SELECT sum(num) WHERE num = 1;

Ні, сер, афаїк він хоче, щоб сума значень не число входження.
0xAli

привіт, ти маєш рацію! чувак, є одна правильна відповідь, ця!
некромант

1
@randomstring Це абсолютно неправильний запит. 1.Що робити, якщо OP хоче where num=2. 2Крім того, цей запит повернеться error, оскільки в ньому не вказано tablename.
Prahalad Gaggar

@Luv, я згоден. це питання безлад.
некромант

@Luv, ти маєш рацію, але OP спочатку не вказав назву таблиці, тому я більше нічого не передбачав як псевдозапит.
0xAli

1

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

наприклад для вашого запиту: -

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


-2

За допомогою цього запиту ви отримаєте результат:

select 
  t.name
  ,( select 
       count (*) as num_value 
     from Table 
      where num =t.num) cnt 
from Table t;

Привіт ! Не могли б ви надати значення "o / p"?
toshiro92

1
@ toshiro92 зазвичай це означає OutPut
Tomerikoo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.