簡體   English   中英

來自2列的MySQL SELECT COUNT DISTINCT

[英]MySQL SELECT COUNT DISTINCT from 2 columns

我以前有1列country ,在其上我執行了COUNT(DISTINCT())GROUP_CONCAT(DISTINCT())

SELECT 
    (SELECT COUNT(DISTINCT(country)) FROM flagevent AS f2
        WHERE f2.user = f.user
    ) AS totalflags,
    GROUP_CONCAT(DISTINCT(country) ORDER BY c.name) AS allcountries,
    f.user, u.username
FROM flagevent AS f
INNER JOIN country AS c ON f.country = c.code
INNER JOIN user AS u ON f.user = u.id
WHERE f.user = 1
    OR f.user in (1, 2, 3)
GROUP BY user
ORDER BY totalflags DESC;

那會給我這個示例結果:

totalflags | allcountries   | user | username
---------------------------------------------
         5 | es,fr,it,de,pt |    1 | jagomf

現在,而不是原來的country列, 我有2列 country1country2在其頂部我必須執行同樣的計算方法,得到DISTINCT兩個2列的值。

如何在2列不同數據之上應用相同的COUNT()GROUP_CONCAT()

更新:表架構:

flagevent (old):
- user: int(11)
- country: varchar(2)

flagevent (new):
- user: int(11)
- country1: varchar(2)
- country2: varchar(2)

user:
- username: varchar(45)

country:
- code: varchar(2)
- name: varchar(45)

這是簡單的方法-只需將新的更改為舊的樣子即可:

請注意,由於您對子查詢進行了計數,因此已對其進行了編輯以使用CTE。

WITH flagevent_comb as (
   SELECT user, country, COUNT(DISTINCT country) as cnt
   FROM (
     SELECT user, country1 AS country FROM flagevent WHERE country1 IS NOT NULL
     UNION ALL
     SELECT user, country2 AS country FROM flagevent WHERE country2 IS NOT NULL  
   ) x
   GROUP BY user, country
)
SELECT f.cnt as totalflags,
    GROUP_CONCAT(DISTINCT(country) ORDER BY c.name) AS allcountries,
    f.user, u.username
FROM flagevent_comb AS f
INNER JOIN country AS c ON f.country = c.code
INNER JOIN user AS u ON f.user = u.id
WHERE f.user = 1
    OR f.user in (1, 2, 3)
GROUP BY user
ORDER BY totalflags DESC;

注意,您可能必須使子查詢更加復雜。 例如,如果有時country1或country2為null,則可能會更好。

   SELECT user, country1 AS country FROM flagevent WHERE country1 IS NOT NULL
   UNION ALL
   SELECT user, country2 AS country FROM flagevent WHERE country2 IS NOT NULL

其他業務規則可能適用。

暫無
暫無

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

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