Dla niektórych może to wyglądać bardzo prosto, ale po prostu nie mogę tego zrozumieć.
Mam wiele zapytań MS-SQL SELECT z tej samej tabeli w kółko:

SELECT count(Page) as tAEC
FROM someTable
WHERE Page LIKE '%AEC%'

Następna

SELECT count(Page) as tTOL
FROM someTable
WHERE Page LIKE '%TOL%'

I tak dalej...

Jaki byłby bardziej efektywny sposób napisania tego zapytania. Wyszukałem w Google kilka podobnych pytań, ale nie mogłem zmusić żadnego z nich do działania. Tak więc każda pomoc jest bardzo doceniana.

25
crashtestxxx 17 październik 2012, 19:53

2 odpowiedzi

Najlepsza odpowiedź
SELECT sum(case when Page LIKE '%AEC%' then 1 end) as tAEC, 
    sum(case when Page LIKE '%TOL%' then 1 end) as tTOL 
FROM someTable 
79
D'Arcy Rittich 17 październik 2012, 19:55

Możesz użyć GROUP BY Page

SELECT
  Page
, COUNT(Page) as "nb"
FROM someTable
GROUP BY Page

Możesz także zrobić GROUP BY CASE...

SELECT
  CASE
    WHEN Page LIKE '%AEC%' THEN "AEC"
    WHEN Page LIKE '%TOL%' THEN "TOL"
    ELSE ""
  END AS "type"
, count(Page) as "nb"
FROM someTable
GROUP BY type

Możesz również COUNT IF

SELECT
  COUNT(IF(Page LIKE '%AEC%', 1, NULL) THEN "AEC"
, COUNT(IF(Page LIKE '%TOL%', 1, NULL) THEN "TOL"
FROM someTable
7
Pierre de LESPINAY 18 październik 2012, 10:56