簡體   English   中英

MySQL,帶有COUNT的SELECT,但如果排序則為GROUP BY

[英]MySQL, SELECT with COUNT, but GROUP BY if sort

我有兩個像這樣的表:

表“用戶”:

user_id | source
----------------
      1 | 2
      2 | 2
      3 | 3
      4 | 0

表“來源”:

source_id | name
----------------
        1 | "one"
        2 | "two"
        3 | "three"
        4 | "four"

現在,我需要從source選擇(*)並另外擁有具有此源的COUNT個“用戶”,但是如果有其他過濾器(PHP mysqli的請求),則需要按其用戶數對“源”表進行排序。

這樣做的最佳方法是什么,有可能一言一行嗎?

--------------增加了編輯----------

第一部分(從另一個表計數的SELECT)我是這樣做的:

SELECT 
    id, name
    (select count(*) from users where source = sources.id) as sourceUsersCount
FROM sources

現在,如何按每個來源中的用戶數量來訂購此列表?

如果需要的話,請檢查以下查詢。

select s.*,a.c from sources s
left join
 (select count(*) as c,source as src 
   from user u join sources s 
      on s.source_id = u.source group by u.source) a 
on s.source_id = a.src;

計算用戶數:

SELECT sources.*, COUNT(users.user_id) FROM sources
LEFT JOIN users ON users.source_id = sources.source_id
GROUP BY sources.source_id;

我認為通過過濾器意味着WHERE子句:

SELECT sources.*, COUNT(users.user_id) FROM sources
LEFT JOIN users ON users.source_id = sources.source_id
WHERE sources.source_id = 2
GROUP BY sources.source_id;

而且,您始終可以在最后附加一個ORDER BY進行排序:

SELECT sources.*, COUNT(users.user_id) FROM sources
LEFT JOIN users ON users.source_id = sources.source_id
GROUP BY sources.source_id
ORDER BY sources.source_id DESC;

通過實現以下目標:

SELECT 
    sources.*,
    count(users.source) as sourceUsersCount
FROM sources
LEFT JOIN users ON sources.id = users.source
//In case of additional filters
WHERE 
    id != 0 AND (name LIKE %?% OR id LIKE %?%)
//\\
GROUP BY sources.id 
//In case of sorting by "users" count
ORDER BY sourceUsersCount ASC 
//\\

這是最好的方法,還是有一些更快的變體?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM