[英]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列 country1
和country2
在其頂部我必須執行同樣的計算方法,得到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.