4

特定のフィールドで個別の値を見つけ、2 つのフィールド (1_user、2_user) でその値の出現回数をカウントし、結果をカウント順に並べ替える MySQL クエリを見つけようとしています。

例データベース

+--------+----------+-----------+
| | ID | 1_ユーザー | 2_ユーザー |
+--------+----------+-----------+
| | 1 | 2 | 1 |
| | 2 | 3 | 2 |
| | 3 | 8 | 7 |
| | 4 | 1 | 8 |
| | 5 | 2 | 8 |
| | 6 | 3 | 8 |  
+--------+----------+-----------+

期待される結果

ユーザー数
----- -----
8 4
2 3
3 2
1 2
4

4 に答える 4

6

クエリ

SELECT user, count(*) AS count
FROM
(
    SELECT 1_user AS USER FROM test

    UNION ALL

    SELECT 2_user FROM test
) AS all_users
GROUP BY user
ORDER BY count DESC

説明

最初の列にすべてのユーザーをリストします。

SELECT 1_user AS USER FROM test

それらを 2 列目のユーザーと組み合わせます。

UNION ALL
SELECT 2_user FROM test

ここでの秘訣は、重複する値を保持するUNION ALLです。

あとは簡単です。サブクエリから必要な結果を選択します。

SELECT user, count(*) AS count

ユーザーごとに集計:

GROUP BY user

そして注文を処方します:

ORDER BY count DESC
于 2012-08-18T09:06:30.883 に答える
2
SELECT u, count(u) AS cnt 
FROM (
    SELECT 1_user AS u FROM table
    UNION ALL
    SELECT 2_user AS u FROM table
) subquery 
GROUP BY u
ORDER by cnt DESC
于 2012-08-18T09:02:04.403 に答える
1

2 つのクエリを取り上げます。

SELECT COUNT(*) FROM table GROUP BY 1_user

SELECT COUNT(*) FROM table GROUP BY 2_user

それらを組み合わせます:

SELECT user, SUM(count) FROM
  ((SELECT 1_user as user FROM table)
  UNION ALL
  (SELECT 2_user as user FROM table))
GROUP BY user, ORDER BY count DESC;
于 2012-08-18T09:00:37.990 に答える
0

期待される結果に含まれていないため、これがあなたが探しているものだと思います7

select usr, count(usr) cnt from
(
   select user_1 usr from users
   union all
   select user_2 usr from users
) u
where u.usr in (select user_1 from users)
group by usr
order by count(u.usr) desc
于 2012-08-18T09:13:26.707 に答える