3

2列の主キーを持つ特定のテーブルでのGROUPBYクエリに問題があります。

私のテーブルは次のようになります。

   CREATE TABLE IF NOT EXISTS `stocks` (
      `id_city` int(10) NOT NULL,
      `id_prod` int(10) NOT NULL,
      `sell_price` int(10) DEFAULT '0',
      PRIMARY KEY (`id_city`,`id_prod`)
    )

そのような値が挿入されているとしましょう:

INSERT INTO `stocks` (`id_city`, `id_prod`, `sell_price`) 
VALUES ('1', '1', '100'), ('2', '1', '90'), ('3', '1', '10');

そのようなクエリの後:

SELECT id_prod, id_city, MIN(sell_price)
            FROM stocks 
            GROUP BY id_prod

結果の行は「id_city」キーを失います-これはcity_idの最初の出現を取ります、

id_prod     id_city     MIN(sell_price)
1           1           10

この場合の適切なクエリを作成するにはどうすればよいですか?結果は次のようになります。

id_prod     id_city     MIN(sell_price)
1           3           10
4

3 に答える 3

2

を保持するレコードを返したい場合はmin(sell_price)、サブクエリを使用できます。

SELECT s1.id_prod, 
  s1.id_city, 
  s1.sell_price
FROM stocks s1
inner join
(
  select id_prod,  MIN(sell_price) sell_price
  from stocks
  group by id_prod
) s2
  on s1.id_prod = s2.id_prod
  and s1.sell_price = s2.sell_price

デモで SQL Fiddle を参照してください

これは以下を返します:

| ID_PROD | ID_CITY | SELL_PRICE |
----------------------------------
|       1 |       3 |         10 |
于 2013-01-10T13:50:59.100 に答える
1

あなたはそのように使用することを意味しますmax(id_city)

    SELECT id_prod, max(id_city) city , MIN(sell_price)
        FROM stocks 
        GROUP BY id_prod 

SQLデモ

またはそのように使用してcount(id_city)

     SELECT id_prod, count(id_city) city, MIN(sell_price)
        FROM stocks 
        GROUP BY id_prod 

SQLデモ

両方のリターン

  ID_PROD   CITY    MIN(SELL_PRICE)
      1        3                10

編集

これを試してみてくださいINNER JOIN

   SELECT s.id_prod, 
          s.id_city, 
          s.sell_price
   FROM stocks s
   inner join
             (
              select id_prod,  MIN(sell_price) sell_price
              from stocks
               group by id_prod
              ) s1
     on s.id_prod = s1.id_prod
     and s.sell_price = s1.sell_price

デモSQLFIDDLE

于 2013-01-10T13:53:04.987 に答える
0

句にも追加する必要がありid_cityますGROUP BY

http://www.w3schools.com/sql/sql_groupby.asp

于 2013-01-10T13:46:59.723 に答える