1

質問があります

SELECT 
  count(product) as amount,
  product, 
  sum(price) AS price 
FROM `products` 
WHERE 
  brid = 'broker' 
AND 
  cancelled is null 
GROUP BY product 
WITH ROLLUP

テーブルをクエリしてブローカー ID を取得し、各ブローカーに対して上記のクエリを 1 つのクエリとして実行することは可能ですか?

ほとんどのように:

SELECT brid FROM membership
THEN

SELECT 
  count(product) as amount,
  product, 
  sum(price) AS price 
FROM `products` 
WHERE 
  brid = membership.brid 
AND 
  cancelled is null 
GROUP BY product 
WITH ROLLUP

THEN
SELECT NEXT brid

これは可能ですか?私はPHPでそれを行う方法を知っていますが、それぞれに対して大量のクエリを作成するよりも、配列を作成できる1つのクエリを好むでしょう。

ありがとう、アダム。

4

3 に答える 3

3

もちろん、「brid」フィールドと「product」フィールドの両方でGROUPBYすることができます。以下に示すように、WITH ROLLUP「brid」、次に「product」でソートされます。

SELECT
  brid, 
  count(product) as amount,
  product, 
  sum(price) AS price 
FROM `products` 
WHERE 
  brid IN (SELECT brid FROM membership)
AND 
  cancelled is null 
GROUP BY brid, product 
WITH ROLLUP
于 2012-09-21T13:49:16.300 に答える
0
SELECT 
  count(product) as amount,
  product, 
  sum(price) AS price 
FROM `products` 
INNER JOIN membership on membership.brid = products.brid
WHERE 
  cancelled is null 
GROUP BY product 
WITH ROLLUP
于 2012-09-21T13:49:11.330 に答える
0

あなたの例から私が理解できる限り、必要なのはinner join between membership and products on brid

次の例を見てください。

productsテーブル:

CREATE TABLE `test` (
  `price` int(11) DEFAULT NULL,
  `product` varchar(20) DEFAULT NULL,
  `brid` varchar(20) DEFAULT NULL,
  `cancelled` varchar(20) DEFAULT NULL
) 

membershipテーブル:

CREATE TABLE `membership` (
  `brid` varchar(20) DEFAULT NULL
) 

そして、以下はqueryあなたが必要とする私のものです:

SELECT 
  t.brid, count(t.product) as amount,
  t.product, 
  sum(t.price) AS price 
FROM products t, membership m
WHERE 
  t.brid = m.`brid`
AND 
  cancelled is null 
GROUP BY product 

それが役立つことを願っています!

于 2012-09-21T13:55:36.920 に答える