0

テーブルには、VisitorIDとURLの2つの列があります。

訪問者が行うすべてのページビューのエントリがテーブルに存在します。各訪問者の合計訪問数を確認したいのですが、訪問者のグループ内のURLはどれも「%page = checkout%」のようではありません。

私はそれがこのようなものだと思っています:

SELECT *、COUNT(*)AS TotalVisits
FROM `VisitorLog`
GROUPBYビジターID
HAVING `URL` NOT IN(SELECT * FROM ?? WHERE` URL` LIKE "%page = checkout%")

しかし、サブクエリが必要な場合など、HAVING句がサブクエリでどのように機能するかを完全には理解していませんか?そして、どのようにネガティブにするのですか?

そして、次回自分でできるように、答えを説明できる人にはボーナスポイント!

ありがとう、

ニック

4

3 に答える 3

2
SELECT *, COUNT(*) AS TotalVisits
FROM `VisitorLog`
WHERE 
    VisitorID NOT IN 
        (SELECT VisitorID FROM `VisitorLog` WHERE `URL` LIKE '%page=checkout%')
GROUP BY VisitorID
于 2010-11-04T11:20:48.913 に答える
0

URLテーブルのフィールドvisitorLogはforeign_keyおよびintegerフィールドであると想定しています。

SELECT v1.VisitorID, COUNT(v1.VisitorID) AS TotalVisits
FROM `VisitorLog` v1, ?? as v2
WHERE v1.URL = v2.URL_ID
AND v2.URL NOT LIKE "%page=checkout%"
GROUP BY VisitorID

私の理解から、例えば。

idvisitor_id日時ページ
111月4日私たちについて
211月4日お問い合わせ
321月4日私たちについて
421月3日私たちについて
521月4日ホーム
611月4日ホーム


    訪問数としてvisitor_id、count(id)を選択します
    FROM visit_table_transaction
    WHERE datetime = "Nov4"
    GROUP BY visitor_id
    訪問数が2を超える

したがって、結果は次のようになります。
visitor_id numberofvisits
1 3

having集計関数はで使用できないため、を使用する必要がある理由WHERE

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

このように書くこともできます

select visitor_id, count(id) as numberofvisits 
FROM visit_table_transaction 
WHERE datetime = "Nov4"
GROUP BY visitor_id
HAVING count(id) > 2

以下は間違っています

 select visitor_id, count(id) as numberofvisits 
 FROM visit_table_transaction 
 WHERE datetime = "Nov4"
 AND count(id) > 2
 GROUP BY visitor_id 

私が間違っていたら、誰かが私を訂正してください。ありがとう。

于 2010-11-04T12:03:04.867 に答える
0
select VisitorID, count(*)
from VisitorLog
where (select count(*) from VisitorLog v2 where v2.VisitorID = VisitorLog.VisitorID and v2.URL like '%page=checkout%') = 0
;
于 2010-11-04T11:21:03.480 に答える