Как вы можете использовать COUNT (DISTINCT ...), когда одно из значений является результатом оператора SELECT?

0

У меня есть оператор SQL, который возвращает строки:

SELECT DISTINCT wp_w2bw2c_event.venue_id, 
    (SELECT MIN(begin_date)     
        FROM wp_w2bw2c_event_detail 
        WHERE wp_w2bw2c_event_detail.event_id = wp_w2bw2c_event.id) 
    as begin_date, 
    wp_w2bw2c_event.id as event_id 
    FROM wp_w2bw2c_event 
    INNER JOIN wp_w2bw2c_venue 
    ON wp_w2bw2c_venue.id = wp_w2bw2c_event.venue_id 
    INNER JOIN wp_w2bw2c_event_detail 
    ON wp_w2bw2c_event_detail.event_id = wp_w2bw2c_event.id 
    WHERE wp_w2bw2c_venue.venue_name LIKE '%ironworks%' 
    OR artist_name LIKE '%ironworks%' 
    OR event_title LIKE '%ironworks%' 
    OR event_detail_title LIKE '%ironworks%' 
    ORDER BY wp_w2bw2c_event.venue_id, begin_date, event_id 

Если я попытаюсь использовать функцию COUNT чтобы просто подсчитать количество строк, я получаю ошибку базы данных SQL

SELECT COUNT(DISTINCT wp_w2bw2c_event.venue_id, 
    (SELECT MIN(begin_date)     
        FROM wp_w2bw2c_event_detail 
        WHERE wp_w2bw2c_event_detail.event_id = wp_w2bw2c_event.id) 
    as begin_date, 
    wp_w2bw2c_event.id as event_id) 
    FROM wp_w2bw2c_event 
    INNER JOIN wp_w2bw2c_venue 
    ON wp_w2bw2c_venue.id = wp_w2bw2c_event.venue_id 
    INNER JOIN wp_w2bw2c_event_detail 
    ON wp_w2bw2c_event_detail.event_id = wp_w2bw2c_event.id 
    WHERE wp_w2bw2c_venue.venue_name LIKE '%ironworks%' 
    OR artist_name LIKE '%ironworks%' 
    OR event_title LIKE '%ironworks%' 
    OR event_detail_title LIKE '%ironworks%' 

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'as begin_date, 
    wp_w2bw2c_event.id as event_id 
    FROM wp_w2bw2c_event 
    INNE' at line 5

Как я могу изменить SQL так, чтобы COUNT(DISTINCT... работал с результатом SELECT?

Теги:

2 ответа

1

Ваш запрос возвращает отдельные строки. Итак, все, что вам нужно сделать, это подсчитать результаты этого запроса:

select count(*) from (your query) q;
  • 0
    Я попробовал это и получил ошибку #1248 - Every derived table must have its own alias . Даже когда я совмещал имена всех таблиц, я все равно получал эту ошибку.
  • 0
    Кроме того, этот запрос будет полностью излишним
Показать ещё 1 комментарий
1

То, что вы пытаетесь, излишне сложно. Что не так с простым способом?

select venueId
, min(begin_date) minBeginDate
from etc
where whatever
group by venueId

Это даст вам отличные значения.

  • 0
    Ты понятия не имеешь о чем говоришь. Если вам нечего добавить, оставайтесь на связи.

Ещё вопросы

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