Множественный выбор, подгруппы

#mysql

#mysql

Вопрос:

У меня есть небольшой совет из SQL. Мне нужно выбрать две группы (ГДЕ) в двух столбцах. Некоторые рабочие «как»:

 SELECT COUNT(WHERE Draw=1) as D1, COUNT(WHERE Draw=2) as D2 FROM SampleData
  

Пример таблицы данных:

 SampleData
--------------------
Id  | Draw | Element
--------------------
1   | 1    | 13
2   | 1    | 15
3   | 1    | 22
4   | 1    | 36
5   | 1    | 45
6   | 2    | 11
7   | 2    | 15
8   | 2    | 22
  

И выводим следующим образом:

 Output:

--------
D1 | D2
--------
5   | 3
  

Комментарии:

1. Извините, но в чем здесь вопрос?

Ответ №1:

Вы можете использовать CASE выражение для этого:

  SELECT 
     COUNT(CASE WHEN Draw=1 THEN 1 END) as D1, 
     COUNT(CASE WHEN Draw=2 THEN 1 END) as D2 
 FROM SampleData
  

mysql также поддерживает If() , поэтому вы также могли бы сделать что-то вроде следующего. Просто имейте в виду, что это не переносимо на другие СУБД, но CASE версия:

  SELECT
     SUM(IF(Draw=1, 1, 0)) as D1,
     SUM(IF(Draw=2, 1, 0)) as D2
 FROM SampleData;
  

Также … mysql поддерживает математику для логических выражений, так что здесь вы могли бы быть действительно краткими:

  SELECT SUM(Draw=1) as D1, Sum(Draw=2) as D2 FROM SampleData;
  

Опять же, хотя это не переносимо в другие СУБД, как CASE выражение.

Комментарии:

1. Выглядит не очень элегантно, но воркс! 🙂 Большое спасибо!

Ответ №2:

Может быть, что-то вроде этого? (непроверенный)

 SELECT COUNT(*) as D1 FROM SampleData WHERE Draw = 1 UNION SELECT COUNT(*) as D2 FROM SampleData WHERE Draw = 2
  

Комментарии:

1. Это привело бы к выводу двух записей с одним столбцом, где OP хочет получить одну запись с двумя столбцами. Однако более тревожным является то, что в случае, если количество записей, где draw=1 и draw=2 одинаковое, это приведет к выводу только одной записи. В любом сценарии имя столбца будет таким, D1 что также будет трудно различить, какая запись является D1 записью, а какая D2 записью.

2. да, но это не может позволить мне группировать и where для всех подгрупп в одном месте