Справка по запросу MySQL, Сгруппируйте по времени, посмотрите, есть ли запись в наборе

#mysql

#mysql

Вопрос:

Краткий вопрос о том, как это сделать, я не уверен, как это будет работать. По сути, у меня есть таблица с тысячами строк в день, и я хочу сгруппировать их по дате для каждой строки. Эта часть проста, но затем я хочу знать, входит ли экземпляр в эту группу, например, я хочу знать, есть ли Пол в эту дату.

    Date      Name
 ------------------
| 4/8/2011 | Jack |
| 4/8/2011 | Jack |
| 4/8/2011 | Jack |
| 4/8/2011 | Jack |
| 4/8/2011 | Jack |
| 4/8/2011 | Paul |
  

У меня есть SELECT count(*) as Total /*not sure what goes here*/ WHERE date = '2011-04-08' GROUP BY date

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

1. Похоже, вы предпочли бы знать, какие группы присутствовали на определенную дату. Семантика, но это важно для запроса.

2. Что ж, Пол определенно ответит на запрос, мне просто нужно знать, входит ли он в каждую группу или нет.

3. Тогда в настоящее время ответ от taylonr создаст такой отчет. Я не уверен, что это то, чего вы хотите, но я делаю предположения.

Ответ №1:

 Select date, Count(*)
    , Max( Case When Name = 'Paul' Then 1 Else 0 End ) As HasPaul
From MyTable
Where date = '2011-04-08'
Group By date
  

Другой подход, при котором вы просто смотрите, равен ли PaulCount > 0:

 Select date
    , Sum( Case When Name = 'Jack' Then 1 Else 0 End ) As JackCount
    , Sum( Case When Name = 'Paul' Then 1 Else 0 End ) As PaulCount
    , Count(*) As OverallCount
From MyTable
Where date = '2011-04-08'
Group By date
  

Ответ №2:

 SELECT COUNT(*), Name FROM <TableName> Where date = <date desired> GROUP BY date, Name
  

Это будет группа по дате, а затем по человеку, так что будет группа 4/8/2011 для Джека и одна для Пола.