簡體   English   中英

連接表以獲取另一列的出現次數

[英]Joining tables to get the number of occurences with another column

我有2張桌子。 一個稱為subscriptions ,另一個稱為service_sushi_service 我正在嘗試獲取所有具有兩個以上不同service_id的電話。 例如。

phone: 12345 service id: 12 
phone: 12345 service id: 12 
phone: 12345 service id: 8
phone: 12345 service id: 8
phone: 12345 service id: 13
phone: 22222 service id: 13
phone: 22333 service id: 3

我需要將其輸出為phone = 12345,出現次數= 3

這就是我到目前為止所得到的:而且我不知道如何進一步。

SELECT 
    `sub`.`phone` AS `phone`
FROM 
    `subscriptions` AS `sub`
LEFT JOIN `service_sushi_service` `sushi_service` ON `sushi_service`.`sushi_service_id` = `sub`.`sushi_service_id`
WHERE 
    date(`sub`.`added`) >= '2013-01-01'
GROUP BY `sub`.`phone`
SELECT 
    `sub`.`phone` AS `phone`,
    COUNT(`sushi_service`.`sushi_service_id`) as occurences        
FROM 
    `subscriptions` AS `sub`
LEFT JOIN `service_sushi_service` `sushi_service` ON `sushi_service`.`sushi_service_id` = `sub`.`sushi_service_id`
WHERE 
    date(`sub`.`added`) >= '2013-01-01'
GROUP BY `sub`.`phone`
HAVING occurences > 2

編輯: 應該指出,HAVING似乎只是MySQL的一種東西 以為我會將其發布以供您參考-http://dev.mysql.com/doc/refman/5.0/en/group-by-extensions.html

我在這段代碼中看到兩件事:

  1. 您為什么要進行LEFT JOIN 我說你需要一個直的INNER JOIN

  2. 您可以使用count(distinct field_name)來獲取相應的值。

因此,SQL可能如下所示:

SELECT 
    `sub`.`phone` AS `phone`,
     count(distinct `sushi_service`.`sushi_service_id`) as `occurrences`
FROM 
    `subscriptions` AS `sub`
JOIN `service_sushi_service` `sushi_service` ON `sushi_service`.`sushi_service_id` = `sub`.`sushi_service_id`
WHERE 
    date(`sub`.`added`) >= '2013-01-01'
GROUP BY `sub`.`phone`
HAVING `occurrences` > 2

完全不需要加入

select s1.phone, count(s1.*) from 
    (select unique phone, sushi_service_id from subscriptions) s1
group by s1.phone having count(s1.*) > 2

暫無
暫無

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

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