1

私の最初のSQLクエリは次のとおりです。

SELECT username,COUNT(username) as total_active_users FROM users WHERE active = '1' GROUP BY referrer //  $act_user

各リファラーのアクティブ ユーザーをカウントするには

2 番目の SQL クエリは次のとおりです。

SELECT COUNT(orders) as total_user_orders FROM users_orders GROUP BY $act_user['username'] // the username from the first query.

最初のクエリから取得した各ユーザーの注文の総数をカウントするには

LEFT JOIN少なくとも1回注文したアクティブユーザーのみをカウントするために使用しようとしていること

問題は次のとおりです。GROUP BY最初のものは「リファラー」で、2番目のものは「ユーザー名」です。

私は次のようなことをしようとしています:

SELECT u.username, COUNT(u.username) as total_active_users, COUNT(b.orders) as 
total_user_orders FROM users u LEFT JOIN users_orders b on u.username = b.username
WHERE u.active = '1' AND total_user_orders >= '1' GROUP BY (u.referrer for u) and (b.username for b)

何かアイデアはありますか?

4

2 に答える 2

0

ユーザー名が一意であり、ユーザーが少なくとも 1 つの順序を持​​つことは、users_ordersテーブルに少なくとも 1 つの行を持つことと同じことを意味すると仮定すると、次のことができます。

SELECT
  u.referrer,
  COUNT(DISTINCT u.username) AS usercount
FROM users u
INNER JOIN users_orders uo ON u.username = uo.username
WHERE u.active = 1
;

usersとの間の結合は、(ステータスusers_ordersのフィルターに加えて) フィルターとして機能します。active重複したユーザー名が生成される場合がありますが、COUNT(DISTINCT)一意のエントリのみがカウントされます。

于 2013-05-23T17:20:43.973 に答える