упорядочение по строкам

#select #count #sql-order-by

#выберите #количество #sql-упорядочение по

Вопрос:

Хорошо, итак, у меня есть запрос, который я пытаюсь создать.. У меня есть 2 таблицы, в таблице 1 содержится множество обычных записей, как обычно, с уникальным идентификатором (автоматическое увеличение), а в таблице 2 есть записи, которые включают некоторые из этих идентификаторов из таблицы1. Я пытаюсь упорядочить по самым высоким записям с тем же идентификатором в table1.. Вот что у меня получилось:

 SELECT * FROM table1 
WHERE table1.status = 1 
AND (SELECT COUNT(*) FROM table2 WHERE table2.tbl1_id = table1.id) 
ORDER BY table1.id DESC
  

Спасибо 🙂

Ответ №1:

 SELECT table1.id 
FROM table1 
LEFT JOIN table2 ON table2.tbl1_id = table1.id
WHERE table1.status = 1 
GROUP BY table1.id
ORDER BY COUNT(table2.tbl1_id) DESC
  

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

1. Должно получиться… Вы изменили это? (т. Е. добавили дополнительные столбцы) Если вы добавляете столбцы в SELECT , вам нужно добавить их в GROUP BY или использовать подход, приведенный в ответе Cybernate.

2. в обеих таблицах тысячи записей, лол, и я пробовал как вашу, так и Cybermates, она не возвращает правильные записи..

3. Возможно, тогда вы недостаточно четко объяснили свои требования. Запросы как в моих, так и в ответах Cybernate получат подсчет количества совпадающих записей в table2 для каждого table1.id ( включая те, где количество равно нулю ) и упорядочат по этому count . разве это не то, что вы имели в виду? Если бы вы хотели исключить единицы с нулевым количеством, вы бы использовали INNER JOIN

4. ОК, понял 🙂 твое сработало 🙂 Спасибо и Мартину, и Cybermate!

Ответ №2:

Попробуйте это:

 SELECT a.*, b.cnt
  FROM table1 a LEFT JOIN
    (
        SELECT tbl1_id, COUNT(*) cnt
            FROM table2
        GROUP BY tbl1_id
    ) b
 ON a.id = b.tbl1_id  
WHERE table1.status = 1 
ORDER BY cnt DESC
  

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

1. Если в table2 нет соответствующих записей для идентификатора, вы все еще хотите показать запись из table1 в своем результате, и если да, то должны ли они отображаться со счетом 0?