這並不完全清楚你想要返回的結果集。
這可能是對你有所幫助:
SELECT t.country
, COUNT(DISTINCT t.id) AS count_table1_rows
, COUNT(r.id) AS count_table2_rows
, COUNT(*) AS count_total_rows
FROM table1 t
LEFT
JOIN table2 r
ON r.table1_id = t.id
WHERE t.timestamp >= NOW() - INTERVAL 7 DAY
AND t.timestamp < NOW()
GROUP BY t.country
ORDER BY COUNT(DISTINCT t.id) DESC
LIMIT 5
,一個最大的5行,每國一行將返回,並在表1的行數,在表2中的行數,和返回的總行數。
LEFT關鍵字指定「外部」連接操作,即使table2中找不到匹配行,也會返回table1中的行。
要獲得與每個國家相關的計數每一個「理由」,你可以做這樣的事情:
SELECT t.country
, COUNT(DISTINCT t.id) AS count_table1_rows
FROM table1 t
LEFT
JOIN (SELECT s.country
, r.reason
, COUNT(*) AS cnt_r
FROM table1 s
JOIN table2 r
ON s.table1_id = t.id
WHERE s.timestamp >= NOW() - INTERVAL 7 DAY
AND s.timestamp < NOW()
GROUP
BY s.country
, r.reason
) u
ON u.country = t.country
WHERE t.timestamp >= NOW() - INTERVAL 7 DAY
AND t.timestamp < NOW()
GROUP
BY t.country
, u.reason
ORDER
BY COUNT(DISTINCT t.id) DESC
, t.country DESC
, u.cnt_r DESC
, u.reason DESC
此查詢不返回「限制」的行。可以將查詢修改爲僅返回一部分行,但可能會變得複雜。在我們挖掘添加「前五名」類型限制的複雜性之前,我們希望確保查詢返回的行是我們實際需要的行的超集。