簡體   English   中英

SQL 使用計數連接沒有公共列的兩個表

[英]SQL join two tables without common column using count

mysql我想計算每個用戶擁有的關注者數量,並且該表沒有相關列。 我希望顯示姓名和粉絲總數,但每個人都顯示有 1 個粉絲,這不是預期的結果。

插入腳本

insert into user (email, password, first_name, last_name) values ('rclunan0@reference.com', 'E7WC5qpzFPA1', 'Richmound', 'Clunan');
insert into user (email, password, first_name, last_name) values ('hturn1@tiny.cc', 'MjEUC4', 'Herculie', 'Turn');
insert into user (email, password, first_name, last_name) values ('wrogier2@intel.com', 'r7BYgEI0', 'Wenonah', 'Rogier');
insert into user (email, password, first_name, last_name) values ('aavramovsky3@woothemes.com', 'FMiUgn66amxW', 'Aleta', 'Avramovsky');
insert into user (email, password, first_name, last_name) values ('tdoldon4@xing.com', '2UzOXfYyK', 'Teddi', 'Doldon');
insert into user (email, password, first_name, last_name) values ('haddyman5@4shared.com', '7GVGQDIBt8fa', 'Hinda', 'Addyman');
insert into user (email, password, first_name, last_name) values ('rgolsby6@slate.com', 'KqklbW', 'Randi', 'Golsby');
insert into user (email, password, first_name, last_name) values ('mhulson7@amazon.co.uk', 'dwUaaMlu', 'Mason', 'Hulson');
insert into user (email, password, first_name, last_name) values ('kdorkins8@t.co', 'qDegvwr8A1n', 'Kareem', 'Dorkins');
insert into user (email, password, first_name, last_name) values ('jpenketh9@topsy.com', 'WucCOGk8', 'Jillane', 'Penketh');

INSERT INTO `following` ( following_id, follower_id)
VALUES (1, 2), (2, 1), (1, 3), (3, 1), (1, 4), (4, 1), (1, 5), (5, 1), (1, 6), (1, 7), (1, 8), (1, 9), (1, 10);

下列的

 - id
 - following_id
 - followers_id

用戶

- id
 - first_name
 - last_name
 - username

我寫的查詢

select first_name, count(follower_id)
from `following`
join `user`
on `user`.id = `following`.id
group by first_name
order by count(follower_id) desc; 

預期輸出:

user|followers
Richmound | 9
Herculie  | 1
Wenonah   | 1
 Aleta    | 1 
Teddi     | 1
Hinda     | 0
Randi     | 0
Mason     | 0
Kareem    | 0
Jillane   | 0

SQL 用於使用鍵關聯表,查找它們相等、不相等或混合的位置,最后聯合或聯合所有。 如果這些表沒有將兩者相關聯的特征,那么我會假設您希望在兩個表上構建 1 的運行總和,然后加入該值。 由於不了解數據庫,我無法提供語法或解決方案。 看起來像事件而不是關系數據庫表,我會在編寫 SQL 之前質疑數據架構和寫入數據的應用程序。

Crazy sql 不是答案,對不起,我在上面建議了它。

這很簡單。 試試下面的查詢。 我假設您在沒有關注者的情況下也需要用戶結果。

SELECT u.first_name,  count(f.following_id)followers
FROM [user] u
Left Outer Join following f ON (u.id = f.following_id)
Group By u.first_name
ORDER BY count(f.following_id) DESC

如果您不需要具有零關注者的用戶,則用戶內部加入。

    SELECT u.first_name,  count(f.following_id)followers
    FROM [user] u
    inner Join following f ON (u.id = f.following_id)
    Group By u.first_name
    ORDER BY count(f.following_id) DESC

暫無
暫無

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

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