MYSQL: как убрать первый ряд?

0

Первая строка - мои результаты - все значения null, как мне удалить это из моих результатов?

Это мой запрос:

SELECT COALESCE(UNIX_TIMESTAMP(Date(p.published_at)),0) as 'day', 
       COALESCE(SUM(case when p.status = 2 then p.value end),0) as 'total_accepted',
       COALESCE(SUM(case when p.status = 1 then p.value end),0) as 'total_open',
       COALESCE(SUM(case when p.status = 3 then p.value end),0) as 'total_declined',
       COALESCE(SUM(case when p.status !=0  then p.value end),0) as 'total_published'
FROM posts as p
GROUP BY DATE(p.published_at);

Ive использовал coalesce для удаления любых нулевых значений из остальной части моего результата, поэтому первая строка технически все 0 теперь. но я рисую эти данные, и мои строки начинаются с них в 1970 году... и компьютеров не было тогда = p

Теги:

3 ответа

1
Лучший ответ

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

SELECT COALESCE(UNIX_TIMESTAMP(Date(p.published_at)),0) as 'day', 
       COALESCE(SUM(case when p.status = 2 then p.value end),0) as 'total_accepted',
       COALESCE(SUM(case when p.status = 1 then p.value end),0) as 'total_open',
       COALESCE(SUM(case when p.status = 3 then p.value end),0) as 'total_declined',
       COALESCE(SUM(case when p.status !=0  then p.value end),0) as 'total_published'
FROM posts as p
WHERE p.published_at IS NOT NULL
GROUP BY DATE(p.published_at);
0
SELECT COALESCE(UNIX_TIMESTAMP(Date(p.published_at)),0) as 'day', 
       COALESCE(SUM(case when p.status = 2 then p.value end),0) as 'total_accepted',
       COALESCE(SUM(case when p.status = 1 then p.value end),0) as 'total_open',
       COALESCE(SUM(case when p.status = 3 then p.value end),0) as 'total_declined',
       COALESCE(SUM(case when p.status !=0  then p.value end),0) as 'total_published'
FROM posts as p
WHERE 'day' <> 0
GROUP BY DATE(p.published_at)

Просто отфильтруйте строку, которая вам не нужна. Другой способ сделать это:

SELECT COALESCE(UNIX_TIMESTAMP(Date(p.published_at)),0) as 'day', 
       COALESCE(SUM(case when p.status = 2 then p.value end),0) as 'total_accepted',
       COALESCE(SUM(case when p.status = 1 then p.value end),0) as 'total_open',
       COALESCE(SUM(case when p.status = 3 then p.value end),0) as 'total_declined',
       COALESCE(SUM(case when p.status !=0  then p.value end),0) as 'total_published'
FROM posts as p
WHERE p.published_at is not null
GROUP BY DATE(p.published_at)
  • 0
    Что делать, если более чем одна запись имеет ноль в качестве значения day ?
  • 0
    Это не должно иметь значения, поскольку они отфильтровываются до того, как GROUP BY их увидит.
0

Вы можете отфильтровать строки, содержащие все NULL, с помощью предложения where:

WHERE p.published_at IS NOT NULL AND p.status IS NOT NULL and p.value IS NOT NULL

Добавление этого запроса в запрос дает

SELECT COALESCE(UNIX_TIMESTAMP(Date(p.published_at)),0) as 'day', 
       COALESCE(SUM(case when p.status = 2 then p.value end),0) as 'total_accepted',
       COALESCE(SUM(case when p.status = 1 then p.value end),0) as 'total_open',
       COALESCE(SUM(case when p.status = 3 then p.value end),0) as 'total_declined',
       COALESCE(SUM(case when p.status !=0  then p.value end),0) as 'total_published'
FROM posts as p
    WHERE p.published_at IS NOT NULL AND p.status IS NOT NULL and p.value IS NOT NULL
GROUP BY DATE(p.published_at);

Если этого достаточно, чтобы отфильтровать дату NULL, используйте

WHERE p.published_at IS NOT NULL 

- это все, что вам нужно. После того, как предложение WHERE находится на месте, нет необходимости в COALESCE в дату, так как published_at никогда не будет null.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню